我的活动有几个ImageView,用户可以在屏幕上移动。如何识别用户实际选择的ImageView?在Xcode中,我可以为每个ImageView分配一个唯一的标签,而不是onTouch获取标签号。 Android上有类似的方法吗?
这是Xcode:
UITouch *touch = [[event allTouches] anyObject];
if ([touch view].tag == 901)
{
iTouchObject = 901;
[self.view bringSubviewToFront:imgRojo1];
}
在Android Activity中我到目前为止完成了:在onCreate中我可以为每个ImageView分配一个ID
ImageView selImage = (ImageView)findViewById(R.id.i904);
selImage.setId(904);
在onTouch.MOVED中我可以使用带有直接分配ID的ImageView。在这种情况下,图像在屏幕上的手指下方平滑移动。
iID = 904;
ImageView selImage = (ImageView)findViewById(iID);
但是,如何从用户触摸的ImageView中获取ID?
我尝试过使用setOnTouchListener:
ImageView selImage = (ImageView)findViewById(R.id.i904);
selImage.setId(904);
selImage.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
iID = v.getId();
ImageView selImage = (ImageView)findViewById(iID);
int eventaction = event.getAction();
int X = (int)event.getX();
int Y = (int)event.getY();
switch (eventaction ) {
case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on a ball
break;
case MotionEvent.ACTION_MOVE: // touch drag with the ball
// move the balls the same as the finger
selImage.setX(X-25);
selImage.setY(Y-25);
break;
case MotionEvent.ACTION_UP:
// touch drop - just do things here after dropping
break;
}
// redraw the canvas
return true;
}});
通过这个我可以选择每个ImageView并且它移动,但是,它不会平滑移动,并且ImageView也会在屏幕上重复。
是否可以在onTouch.MOVED中查看第一个案例并使用它来获取ID:iID = v.getId();
答案 0 :(得分:1)
您可以查看当前视图的ID,并将其与实际资源ID进行比较。
例如:
switch (v.getId()) {
case R.id.image1:
// Do this
break;
case R.id.image2:
// ..
break;
case R.id.image3:
// ..
break;
}
您也可以查看this page以了解更多关于使用ChoiceDragListener
进行拖放的内容。
答案 1 :(得分:1)
更新:
我找到了一个解决方案,可能不是最优化的解决方案,但工作效果很好。希望它能在类似的情况下帮助你的其他人:
对于每个ImageView,我分配一个ID(setID)和setOnTouchListener。我在setOnTouchListener中所做的只是分配一个与我用于ID的数字相同的整数。重要的是将RETURN FALSE,这将停止setOnTouchListener。
ImageView selImage = (ImageView)findViewById(R.id.i904);
selImage.setId(904);
selImage.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
iID = 904;
return false;
}
});
我已经添加了以下onTouchEvent()。这里首先要选择具有之前在整数中设置的ID的ImageView。
public boolean onTouchEvent(MotionEvent event) {
ImageView selImage = (ImageView)findViewById(iID);
int eventaction = event.getAction();
int X = (int)event.getX();
int Y = (int)event.getY();
switch (eventaction ) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
selImage.setX(X-25);
selImage.setY(Y-25);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
现在我可以触摸任何ImageView并在屏幕上移动它们。希望它有所帮助!