"대상"뷰까지의 거리를 지속적으로 모니터링하고 드래그 가능한 뷰를 대상 뷰 위로 드래그 할 때를 감지 할 수있게하면서 드래그 가능한 뷰를 원합니다. 내 생각은 두보기의 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;
}
}
textViewRect에는 lastX 및 lastY 오프셋을 사용하지만 imageViewRect에는 사용하지 않는 이유는 무엇입니까? 그들을 제거하려고 했습니까? –