2011-12-30 18 views
5

He mostrado imágenes del recurso en mi aplicación como filas y columnas al azar. De esas filas y columnas me gustaría intercambiar las dos imágenes cuando el usuario haga clic en al lado de solo imágenes. El siguiente código mostrará las imágenes en filas y columnas de forma aleatoria.cómo intercambiar imágenes en lienzo en android?

private void rand(int imagesList[][]) 
{ 
    Random generator = new Random(); 
    int temp; 
    for (int i = 0; i < MAX_ROWS; i++) 
     for(int j = 0; j < MAX_COLS; j++) 
     { 
      int randRowPos = generator.nextInt(MAX_ROWS); 
      int randColPos = generator.nextInt(MAX_COLS); 
      temp = imagesList[i][j]; 
      imagesList[i][j] = imagesList[randRowPos][randColPos]; 
      imagesList[randRowPos][randColPos]= temp; 
     } 
} 

usando el código anterior he mostrado las imágenes como filas y columnas.

Aquí, ¿cómo puedo cambiar las dos imágenes al lado de las filas y columnas?

favor de cualquier organismo que me ayude .....

Respuesta

2

no tengo privilegios para añadir comentarios, por lo que estoy publicando esto como respuesta. ¿Qué quiere decir con imágenes al lado? ¿Es cuando el usuario hace clic en una imagen, debe intercambiarse con la imagen al lado? ¿También puede compartir el código donde ha agrupado estas imágenes para ver o cualquier vista de adaptador?

EDIT:

yo también tenía situación similar en los momentos en los diseños absolutos estaban vivos. ¿Qué había hecho es el siguiente:

Clase:

public class PlayScreen extends Activity implements OnTouchListener 

    private Panel mainPanel; // Panel for out display 
    boolean firstClick = false; 

OnCreate:

main = new Panel(this); 
// Display the panel (calls the ondraw and updates the display) 
setContentView(main,new ViewGroup.LayoutParams(screenwidth,screenheight)); 
// Listen for touchevents on the panel 
main.setOnTouchListener(this); 

Panel:

class Panel extends View 
    { 
     /* 
     * Init a Panel to draw on and a paint to paint with 
     */ 
     Paint mBitmapPaint; 
     public Panel(Context context) 
     { 
      super(context); 
      mBitmapPaint = new Paint(); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) 
     { 
     drawImages(canvas); 
     } 
    } 

drawImages:

private void drawImages(Canvas canvas) 
{ 

     for(int i = 0; i<MAX_ROWS; i++){ 
      for(int j=0; j<MAX_COLS; j++) 
      { 
     int xpos = j*bmp.getWidth()+j*2; 
     int ypos = i*bmp.getHeight()+i*2; 
      bmp = BitmapFactory.decodeResource(mContext.getResources(), items[i][j],opts); 
       canvas.drawBitmap(bmp,xpos,ypos,mBitmapPaint); 
     clickzonex.add(xpos); 
     clickzoney.add(ypos); 
     clickzonei.add(i); 
     clickZonej.add(j); 

      } 
     } 

} 

OnTouch:

onTouch(View v, MotionEvent event) : 

if (event.getAction() == MotionEvent.ACTION_DOWN) 
{ 
// imply logic 
x = (int) event.getX(); 
y = (int) event.getY(); 

    for(int i = 0; i < clickzonex.size();i++) 
    { 
    if((x>clickzonex[i]) && (x<(clickzonex[i]+ bmp.getwidth())) && (y>(clickzoney[i])) && (y<(clickzoney[i]+bmp.getHeight()))) 
    { 
    // we have a click in a zone so we get the card-number in that zone 
    if(firstClick == false) 
    { 
    itemAti=clickzonei[i]; 
    itemAtj = clickzonej[i]; 
    firstclick = false; 
    } 
    else 
    { 
    FirstItemToSwap = items[clickzonei[i]][clickzonej[i]]; 
    SecondItemToSwap = items[itemAti][itemAtj]; 

    // Now do the swaping using any algo you like. 

    main.postInvalidate(); 
    firstclick = true; 
    } 
    break; 
    } 
    } 
return true; 
} 
else 
{ 
return false; 
} 

yo sólo he tratado de mostrar que la lógica usando mi propio ejemplo y mezclarlo con su código. El punto principal es que en el método de ondraw simplemente llame a drawcanvas y en touch solo cambie los elementos [] [] y llame al método postinvalidate de la clase Panel.

+0

http://stackoverflow.com/questions/8708324/how-to-swap-the-bitmap-images-on-view-in-android –

+0

favor pasar por encima de enlace que he dado la implementación del código. –

0

No estoy seguro de lo que realmente está preguntando aquí, así que intente aclarar la pregunta.

Un enfoque podría ser utilizar un ViewAnimator como padre para cada una de las ImageViews dibujables.

<ViewAnimator 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/slideshow_animator" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

Entonces una vez que se captura el evento que debe activar el canje, se puede utilizar el ViewAnimator para cambiar la vista (en su caso ImageView) que utiliza. Incluso puede agregar fácilmente un efecto de animación http://developer.android.com/reference/android/widget/ViewAnimator.html

1

Tuve que hacer algo como esto una vez. Acabo de intercambiar las referencias de imagen en la matriz e hice un redibujado (invalidate()) en todo el asunto.

void swap(int x1, int y1, int x2, int y2) { 
    // swap items[x1][y1] and items[x2][y2] 
    ........ 
    invalidate(); 
} 
Cuestiones relacionadas