मैं के शीर्ष पर ImageView
के भीतर एक छवि पर कुछ साधारण फोटो मैनिपुलेशन पर अपना हाथ आजमा रहा हूं, जिसकी औसत 200dp
ऊंचाई है और इसके माता-पिता की चौड़ाई से मेल खाता है।एंड्रॉइड - ड्रैग और फसल मुद्दे
मैं एक कस्टम onTouchListener
वर्ग है, जो एक matrix
बनाता है और ImageView
खींचें भीतर छवि तब्दील को लागू किया है:
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(v.getX(), event.getY() - start.y);
}
break;
यह पूरी तरह से काम करता है, यह y पर छवि खींच लेता है अक्ष केवल। लेकिन जब उपयोगकर्ता रिलीज़ करता है तो मैं छवि को ImageView
क्षेत्र की सीमाओं तक फसल करना चाहता हूं।
फसल:
case MotionEvent.ACTION_UP:
if (mode == DRAG) {
Bitmap bitmap = drawableToBitmap(view.getDrawable());
Bitmap result = Bitmap.createBitmap(bitmap,view.getLeft(), view.getTop(), view.getWidth(), view.getHeight());
view.setImageBitmap(result);
}
break;
यह सही आकार के लिए छवि फसलों, लेकिन केवल imageView नहीं दिखाई सीमाओं की पृष्ठभूमि के ऊपर से। Bitmap
वर्ग फ़ंक्शन createBitmap(int x, int y, int width, int height)
पर कॉल के साथ मेरी एकमात्र धारणा view.getTop()
शीर्ष पर शुरू हो रही है।
तो, मेरा प्रश्न है: मैं दृश्य दृश्य सीमाओं और पृष्ठभूमि/मैट्रिक्स सीमाओं के शीर्ष के बीच अंतर की गणना कैसे कर सकता हूं?
नोट: छवि एक चित्र (नीली) को प्रदर्शित करता है जो एक गतिविधि के शीर्ष पर स्थित है (सियान देख क्षेत्रों सिर्फ पृष्ठभूमि ImageView
के अदृश्य सीमाओं, गतिविधि नहीं हैं)
मैं इस बात पर जोर देना चाहता हूं कि मैं इसे प्राप्त करने के लिए किसी तीसरे पक्ष के पुस्तकालयों का उपयोग नहीं करना चाहता हूं।
यदि आवश्यक हो तो मैं अतिरिक्त कोड प्रदान करने के इच्छुक हूं।
अद्यतन:
पूर्ण onTouch
विधि:
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
// Dump touch event to log
dumpEvent(event);
// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(v.getX(), event.getY());
mode = DRAG;
originalY.y = (int) event.getY();
break;
case MotionEvent.ACTION_UP:
if (mode == DRAG) {
Bitmap bitmap = drawableToBitmap(view.getDrawable());
Bitmap result = Bitmap.createBitmap(bitmap,view.getLeft(), view.getTop(), view.getWidth(), view.getHeight());
view.setImageBitmap(result);
}
break;
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(v.getX(), event.getY() - start.y);
}
break;
}
view.setImageMatrix(matrix);
return true; // indicate event was handled
}
अपनी स्क्रीन गोली मार दी, किसी भी बिटमैप आप पूरे स्क्रीन में पृष्ठभूमि में सेट या आप किसी भी ऊंचाई सेट करूँ में, मुझे पता है तुम 200dp डाल दिया है, लेकिन मैं छवि के अपने दृश्य क्षेत्र है कि बटन पर क्लिक काटी जानी चाहिए सोचता है, इसलिए यदि आप प्रदान करते हैं मुझे वास्तविक छवि के साथ अपनी स्क्रीन जानकारी तो मैं बेखटके आप में मदद मिलेगी .. –
imageView अंदर छवि स्क्रीन की चौड़ाई के लिए क्रॉप किया जाएगा और ऊंचाई पर इसके कट किया जा रहा आधारित (सामान्य पैमाने फसल) का कहना है, तो उपयोगकर्ता को खींच सकते हैं मूल छवि की ऊंचाई जितनी अधिक जगह प्रदान करती है, यह कोई भी छवि होगी (जो न्यूनतम स्क्रीन की चौड़ाई फिट होती है)। केवल बात यह है कि इस में तय हो गई है, imageView ही की ऊंचाई है, मैट्रिक्स आकार गतिशील है, जो मैट्रिक्स शीर्ष और imageView शीर्ष के बीच की दूरी का मतलब है भी गतिशील –