2011-05-30 13 views
7

मैं जानना चाहता हूं कि ImageView पर एक रेखा कैसे खींचना है क्योंकि उपयोगकर्ता अपनी उंगली को स्वाइप करता है?Android पर ImageView में कोई रेखा कैसे आकर्षित करें?

क्या कोई शरीर इसे समझा सकता है? या शायद इस पर शुरू करने के लिए कोई लिंक।

+0

क्या आप कुछ रेखा खींचना चाहते हैं या उस पर पेंट करना चाहते हैं? –

उत्तर

8

आपके पास अपना स्वयं का छवि दृश्य होना चाहिए और ड्रॉ फ़ंक्शन पर ओवरराइड होना चाहिए। वस्तु MyImageView बनाने इस

public class MyImageView extends ImageView{ 

    public MyImageView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); 
     canvas.drawLine(0, 0, 20, 20, p); 

    } 

} 

की तरह है और अपने मुख्य वर्ग में कुछ का उपयोग करें; और जब आप अपने प्रदर्शन कॉल को स्पर्श करते हैं तो update(); फ़ंक्शन

+0

हाय जॉर्ज, क्या आपको ऑन टच() ईवेंट पर अद्यतन विधि को कॉल करने का मतलब था? मुझे बहुत पूछने के लिए खेद है, मैं इसमें नया हूं। – user776550

+0

हाँ, मेरा मतलब है। कोई समस्या नहीं है, आप पूछ सकते हैं कि आप कितना चाहते हैं)) – George

+0

आपको ऑन टच लिस्टनर को ओवरराइड करना होगा और आप में अल्ट टच फ़ंक्शन अमान्य – George

0

उस रेखा को चित्रित करने के लिए जिस उपयोगकर्ता ने वास्तव में आपको आकर्षित किया है, आपको प्रेषण टचवेन्ट को ओवरराइड करना होगा। उस घटना से आप लाइन के निर्देशांक प्राप्त कर सकते हैं और उन्हें जॉर्ज द्वारा दिखाए गए अनुसार ड्रा में आकर्षित कर सकते हैं।

http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)

0

ApiDemos नमूना FingerPaint पर एक नजर डालें।

इसका उपयोग करके आप स्क्रीन पर छूकर ImageView पर रेखा खींच सकते हैं।

4

इस तरह आप एक और छवि पर हरे आयत आकर्षित कर सकते हैं की एक पूरी उदाहरण है:

<CustomWidgets.DrawImageView 
    android:id="@+id/widgetMap" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/map_small" 
/> 
:

package CustomWidgets; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 

/** 
* Allows to draw rectangle on ImageView. 
* 
* @author Maciej Nux Jaros 
*/ 
public class DrawImageView extends ImageView { 
    private Paint currentPaint; 
    public boolean drawRect = false; 
    public float left; 
    public float top; 
    public float right; 
    public float bottom; 

    public DrawImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     currentPaint = new Paint(); 
     currentPaint.setDither(true); 
     currentPaint.setColor(0xFF00CC00); // alpha.r.g.b 
     currentPaint.setStyle(Paint.Style.STROKE); 
     currentPaint.setStrokeJoin(Paint.Join.ROUND); 
     currentPaint.setStrokeCap(Paint.Cap.ROUND); 
     currentPaint.setStrokeWidth(2); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if (drawRect) 
     { 
      canvas.drawRect(left, top, right, bottom, currentPaint); 
     } 
    } 
} 

जब आप यह परिभाषित किया है आप उदाहरण के लिए ऊपर देखें (विजेट) के साथ imageView जगह ले सकता है

mapImageView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      DrawImageView drawView = (DrawImageView) v; 

      // set start coords 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       drawView.left = event.getX(); 
       drawView.top = event.getY(); 
      // set end coords 
      } else { 
       drawView.right = event.getX(); 
       drawView.bottom = event.getY(); 
      } 
      // draw 
      drawView.invalidate(); 
      drawView.drawRect = true; 

      return true; 
     } 
    }); 
:

तो फिर तुम गतिविधि के स्पर्श घटना है कि लेआउट को नियंत्रित करता है, उदाहरण के लिए इसका उपयोग कर सकते

बेशक आप कुछ गेटर्स और सेटर्स और अन्य जावा ओवर-इंजीनियरिंग दिनचर्या बना सकते हैं ;-)।