我希望有一个可拖动的视图,同时能够持续监控到目标"的距离。查看并检测何时拖动可拖动视图在目标视图上。我的想法是获取两个视图的Rect's
并使用intersect()
来检查它们是否正在触摸。但是我的实现并不顺利 - 有时它检测到错误位置的重叠或者没有检测到重叠的结束。
你能告诉我我做错了什么或者可能导致正确的做法吗? (我不能使用startDrag()
,因为它不允许在拖动时监视事件。
onCreate
中的代码:
//find UI
myTextView = (TextView) findViewById(R.id.textView);
myImageView = (ImageView) findViewById(R.id.imageView);
//assign touch listener
myTextView.setOnTouchListener(new MyTouchListener());
MyTouchListener
的代码:
class MyTouchListener implements View.OnTouchListener {
//last coordinates
float lastX;
float lastY;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
view.bringToFront();
lastX = motionEvent.getRawX();
lastY = motionEvent.getRawY();
}
case MotionEvent.ACTION_MOVE: {
//motion difference
float deltaX = motionEvent.getRawX() - lastX;
float deltaY = motionEvent.getRawY() - lastY;
//set new last coordinates
lastX = motionEvent.getRawX();
lastY = motionEvent.getRawY();
//animate view to new location
view.animate().translationXBy(deltaX).translationYBy(deltaY).setDuration(0).start();
//get Rects
Rect textViewRect = new Rect((int)lastX+myTextView.getLeft(), (int)lastY+myTextView.getTop(), (int)lastX+myTextView.getRight(), (int)lastY+myTextView.getBottom());
Rect imageViewRect = new Rect(myImageView.getLeft(), myImageView.getTop(), myImageView.getRight(), myImageView.getBottom());
if (imageViewRect.intersect(textViewRect)) {
myImageView.setImageDrawable(getResources().getDrawable(android.R.drawable.ic_dialog_info));
} else {
myImageView.setImageDrawable(getResources().getDrawable(android.R.drawable.ic_delete));
}
}
}
return true;
}
}
答案 0 :(得分:0)
动画翻译是不必要的,因为触摸事件应该平滑地移动TextView。只需将新的X,Y坐标分配给TextView,如下所示:
view.setX(view.getX() + deltaX);
view.setY(view.getY() + deltaY);