我正在使用Android Studio .
我搜索了解决方案但找不到类似的东西 .
我想知道在不同的ImageView上启动DOWN操作时,哪个ImageView出现UP动作(最终能够将一个图像拖到另一个上,并通过获取拖动的图像的位置使其捕捉到相同的位置) .
我的例子有两个带有id imageView(左)和imageView2(右)的ImageView . 在我的例子中,我还没有拖动任何东西,我只想触摸左侧图像,在日志中看到“动作已关闭”并将手指抬起右侧图像,显示“动作已关闭2” .
我不知道这是否容易实现 .
据我所知,测试时,MotionEvent.ACTION_UP只会在你事先按下它时触发ImageView . 因此,当我在imageView2上发布时,它只显示左图像中的“动作已启动” .
我想知道是否有可能通过返回false来播放,因为返回值告诉我是否消耗了一个ActionEvent,所以我想如果imageView的UP事件返回false,可能它会触发imageView2的UP事件但是没有 . (要么我完全误解,要么在第二个时不识别UP,因为它不是以DOWN开始,而MotionEvents可能总是以DOWN开始) .
public class MainActivity extends Activity {
ImageView imageView;
ImageView imageView2;
String DEBUG_TAG = "action";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
imageView2 = findViewById(R.id.imageView2);
imageView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//int action = MotionEventCompat.getActionMasked(event);
int action = event.getActionMasked();
switch(action) {
case (MotionEvent.ACTION_DOWN) :
Log.d(DEBUG_TAG,"Action was DOWN"+v.toString());
return true;
case (MotionEvent.ACTION_MOVE) :
//Log.d(DEBUG_TAG,"Action was MOVE");
return true;
case (MotionEvent.ACTION_UP) :
Log.d(DEBUG_TAG,"Action was UP"+v.toString());
return false;
default :
//return true;
}
return true;
}
});
imageView2.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//int action = MotionEventCompat.getActionMasked(event);
int action = event.getActionMasked();
switch(action) {
case (MotionEvent.ACTION_DOWN) :
Log.d(DEBUG_TAG,"Action was DOWN2"+v.toString());
return true;
case (MotionEvent.ACTION_MOVE) :
//Log.d(DEBUG_TAG,"Action was MOVE");
return true;
case (MotionEvent.ACTION_UP) :
Log.d(DEBUG_TAG,"Action was UP2"+v.toString());
return true;
default :
//return true;
}
return true;
}
});
}
}
如果没有简单的方法可以做到这一点,我正在考虑用数学方法解决这个问题,但也许你们中的一些人可以提供帮助 .
所以我的问题是,有没有办法在第二个ImageView上识别UP动作,而当前正处于另一个ImageView的MotionEvent中?
1 回答
我想你想知道哪个是你从屏幕上释放手指的视图,对吗?
为此,您可以对所有视图使用相同的“View.OnTouchListener()”,在ACTION_UP中,您必须调用与此类似的新方法(伪代码):
此方法获取View界限并比较它们的触摸事件的X和Y.如果X和Y包含在View边界内,则意味着View是您需要的 .