gpt4 book ai didi

android - 如何在拖动一个图像时停止其他图像移动

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:02 25 4
gpt4 key购买 nike

在我的应用程序中,我能够将图像一个接一个地重叠,当我从图像组中拖动一个图像时,左右图像也在屏幕上移动。如何限制这个,下面是我的代码

    int cards[] = {R.drawable.c1,R.drawable.c2,R.drawable.c3,R.drawable.c4,R.drawable.c5,R.drawable.c6,
R.drawable.c7,R.drawable.c8,R.drawable.c9,R.drawable.c10,R.drawable.c11,R.drawable.c12,R.drawable.c13};
ImageView[] Images = new ImageView[cards.length];
for (int i = 0; i < cards.length; i++) {
Images[i] = new ImageView(this);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
if (i != 0) {

params.addRule(RelativeLayout.ALIGN_LEFT,i-1);
params.leftMargin= 40;
Images[i].setImageBitmap(BitmapFactory.decodeResource(getResources(), cards[i]));
Images[i].setId(i);
Images[i].setOnTouchListener(this);
layout.addView(Images[i], params);
} else {
Images[i].setImageBitmap(BitmapFactory.decodeResource(getResources(), cards[i]));
Images[i].setId(i);
Images[i].setOnTouchListener(this);
layout.addView(Images[i], params);
}

}

//Ontouch

@Override
public boolean onTouch(View p_v, MotionEvent p_event){
params = (RelativeLayout.LayoutParams)p_v.getLayoutParams();
switch (p_event.getAction()){
case MotionEvent.ACTION_DOWN:
{
status = START_DRAGGING;
imageView1 = new ImageView(this);
imageView1.setImageBitmap(p_v.getDrawingCache());

m_lastTouchX = p_event.getX();
m_lastTouchY = p_event.getY();

break;
}
case MotionEvent.ACTION_UP:
{
status=STOP_DRAGGING;
break;
}
case MotionEvent.ACTION_MOVE:
{
if (status == START_DRAGGING) {
m_dx = p_event.getX() - m_lastTouchX;
m_dy = p_event.getY() - m_lastTouchY;

m_posX = m_prevX + m_dx;
m_posY = m_prevY + m_dy;
System.out.println("Dragging");
params.leftMargin = (int) m_posX;

params.topMargin=(int) m_posY;
p_v.bringToFront();
p_v.setLayoutParams(params);
imageView1.invalidate();
m_prevX = m_posX;
m_prevY = m_posY;

}


break;

}
}
return true;
}

最佳答案

这里有一个小 fragment 可以帮助您继续前进。我在 RelativeLayout 中添加了一些图像。为了更好的拖动性能,绘图是在 Canvas 中完成的。您只需要处理布局参数更新 MotionEvent.ACTION_UP 事件:

private ImageView[] Images;
private boolean mDragging = false;
private Rect mImageRect = new Rect();
int mX = 0;
int mY = 0;
private Bitmap mBitmap;
private ImageView mImage;

@Override
public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mX = (int) ev.getX();
mY = (int) ev.getY();

for (ImageView image : Images) {
image.getHitRect(mImageRect);

if (mImageRect.contains(mX, mY)) {
mDragging = true;

mImage = image;
mBitmap = ((BitmapDrawable) mImage.getDrawable())
.getBitmap();

mImage.setVisibility(View.GONE);
postInvalidate();
break;
}
}

break;
case MotionEvent.ACTION_MOVE:
if (mDragging) {
mX = (int) ev.getX();
mY = (int) ev.getY();

postInvalidate();
}
break;
case MotionEvent.ACTION_UP:
if (mDragging) {
mDragging = false;
mBitmap = null;
mImage.setVisibility(View.VISIBLE);
mImage = null;
}
break;
}

return super.onTouchEvent(ev);
}

@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);

if (mBitmap != null) {
canvas.drawBitmap(mBitmap, mX, mY, null);
}
}

关于android - 如何在拖动一个图像时停止其他图像移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21823697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com