कूद रहे हैं मैंने दृश्यों को खींचने के लिए ऑन टचलिस्टर बनाया है। यदि मैं getRawX()
और getRawY()
का उपयोग करता हूं तो छवियां आसानी से खींचती हैं। इसके साथ समस्या यह है कि जब आप दूसरा पॉइंटर नीचे डालते हैं तो पहला पॉइंटर उठाकर छवि दूसरी पॉइंटर पर पहुंच जाएगी।कूदते छवि देखें। getX() और getY() मान
यह ऑन टचलिस्टर pointerId
का ट्रैक रखकर उस समस्या को ठीक करने का प्रयास करता है। इस टचलिस्टनर के साथ समस्या एक छवि दृश्य खींचते समय है, ImageView सुंदर पागलपन के चारों ओर कूदता है। getX()
और getY()
मूल्य चारों ओर कूदते हैं।
मुझे लगता है कि मैं इसे सही तरीके से कर रहा हूं। मैं इसके लिए एक कस्टम व्यू लिखना नहीं चाहता क्योंकि मैंने पहले ही एक स्केल जेस्चर डिटेक्टर लागू किया है और एक कस्टम रोटेट जेस्चर डिटेक्टर लिखा है जो काम करता है। सब ठीक काम करता है लेकिन getRawX()
और getRawY()
का उपयोग करते समय मुझे मिलने वाली समस्या को ठीक करने की आवश्यकता है।
किसी को भी मैं गलत यहाँ क्या कर रहा हूँ पता है?
final View.OnTouchListener onTouchListener = new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
relativeLayoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
final int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
{
final float x = event.getX();
final float y = event.getY();
// Where the user started the drag
lastX = x;
lastY = y;
activePointerId = event.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE:
{
// Where the user's finger is during the drag
final int pointerIndex = event.findPointerIndex(activePointerId);
final float x = event.getX(pointerIndex);
final float y = event.getY(pointerIndex);
// Calculate change in x and change in y
final float dx = x - lastX;
final float dy = y - lastY;
// Update the margins to move the view
relativeLayoutParams.leftMargin += dx;
relativeLayoutParams.topMargin += dy;
v.setLayoutParams(relativeLayoutParams);
// Save where the user's finger was for the next ACTION_MOVE
lastX = x;
lastY = y;
v.invalidate();
break;
}
case MotionEvent.ACTION_UP:
{
activePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL:
{
activePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP:
{
// Extract the index of the pointer that left the touch sensor
final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = event.getPointerId(pointerIndex);
if(pointerId == activePointerId)
{
// This was our active pointer going up. Choose a new
// active pointer and adjust accordingly
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
lastX = (int) event.getX(newPointerIndex);
lastY = (int) event.getY(newPointerIndex);
activePointerId = event.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
};
image1.setOnTouchListener(onTouchListener);
किसी के पास इसका समाधान है? ऐसा लगता है कि दूसरों ने इस मुद्दे में भाग लिया है, लेकिन मुझे अभी तक कोई समाधान नहीं मिला है। –