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.
Nguồn
2012-01-03 06:13:04
http://stackoverflow.com/questions/8708324/how-to-swap-the-bitmap-images-on-view-in-android –
xin vui lòng đi qua liên kết ở trên tôi đã cho triển khai mã. –