2011-12-30 50 views
5

Tôi đã hiển thị hình ảnh từ tài nguyên trong ứng dụng của tôi dưới dạng hàng và cột một cách ngẫu nhiên. Từ những hàng và cột tôi muốn trao đổi hai hình ảnh khi người dùng nhấp vào bên cạnh chỉ hình ảnh. Mã sau sẽ hiển thị hình ảnh theo hàng và cột một cách ngẫu nhiên.cách hoán đổi hình ảnh trên canvas trong 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; 
     } 
} 

bằng cách sử dụng mã ở trên tôi đã hiển thị hình ảnh dưới dạng hàng và cột.

Ở đây làm cách nào tôi có thể trao đổi hai hình ảnh bên cạnh từ hàng và cột?

vui lòng bất kỳ cơ thể nào giúp tôi .....

Trả lời

2

Tôi không có đặc quyền để thêm nhận xét, vì vậy tôi đăng bài này làm câu trả lời. Ý của bạn là gì bên cạnh hình ảnh? Có phải khi người dùng nhấp vào một hình ảnh, nó sẽ được hoán đổi với hình ảnh bên cạnh nó? Bạn cũng có thể chia sẻ mã nơi bạn đã binned những hình ảnh này để xem hoặc bất kỳ adapterview?

CHỈNH SỬA:

Tôi cũng có tình huống tương tự vào thời điểm bố cục tuyệt đối vẫn còn sống. Những gì tôi đã làm được như sau:

Class:

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; 
} 

Tôi vừa cố gắng cho bạn thấy logic sử dụng ví dụ của riêng tôi và trộn nó với mã của bạn. Điểm chính là trong phương thức ondraw chỉ cần gọi drawcanvas và chạm vào chỉ cần hoán đổi các mục [] [] và gọi phương thức postinvalidate của lớp Panel.

+0

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

+0

xin vui lòng đi qua liên kết ở trên tôi đã cho triển khai mã. –

0

Không hoàn toàn chắc chắn những gì bạn đang thực sự yêu cầu ở đây, vì vậy hãy cố gắng làm rõ câu hỏi.

Một cách tiếp cận có thể là sử dụng ViewAnimator làm cha mẹ cho mỗi ImageView có thể vẽ được.

<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"> 

Sau đó, khi bạn chụp sự kiện sẽ kích hoạt hoán đổi, bạn có thể sử dụng ViewAnimator để hoán đổi chế độ xem (trong trường hợp ImageView) của bạn. Bạn thậm chí có thể dễ dàng thêm hiệu ứng hoạt ảnh http://developer.android.com/reference/android/widget/ViewAnimator.html

1

Tôi phải làm điều gì đó như thế này một lần. Tôi chỉ hoán đổi các tham chiếu hình ảnh trong mảng và đã vẽ lại (invalidate()) trên toàn bộ.

void swap(int x1, int y1, int x2, int y2) { 
    // swap items[x1][y1] and items[x2][y2] 
    ........ 
    invalidate(); 
} 
Các vấn đề liên quan