2010-12-11 18 views
9

में मैं n खींचें Android 2.xखींचें n ड्रॉप TextView एंड्रॉयड

कृपया में छवि पर पाठ दृश्य ड्रॉप, नीचे इस छवि को देखने के लिए चाहते हैं। alt text

यहां, "ब्लू" रंग व्यूग्राप का प्रतिनिधित्व करता है, "व्हाइट" छवि दृश्य है और छवि ImageView पर सेट है। लिखा गया टेक्स्ट "फैशन" एक टेक्स्ट व्यू है। इस प्रकार मैंने संरचना को कार्यान्वित किया है। अब मैं उपयोगकर्ता को टेक्स्ट व्यू का चयन करने और छवि के किसी भी हिस्से में खींचने की अनुमति देना चाहता हूं और फिर इसे वांछित स्थिति में छवि पर छोड़ देना चाहता हूं।

अब तक संदर्भ के लिए मैंने निम्नलिखित यूआरएल का उल्लेख करने की कोशिश की लेकिन जब भी मैं बटन की बजाय टेक्स्टव्यू का उपयोग करता हूं तो चीजें असामान्य हो रही हैं।

link text

किसी को भी मुझे रोड मैप या उदाहरण यह किया जाना दे सकते हैं?

+0

यदि आप वास्तव में एक प्रश्न पूछते हैं तो अपने प्रश्नों के उत्तर प्राप्त करना बहुत आसान है। – CommonsWare

+0

ओह यह मिला, मैं बस एक रोड मैप के लिए पूछ रहा हूं – Hunt

उत्तर

8

इसके बजाय, अपनी छवि दृश्य को कैनवास के रूप में आकर्षित करने का प्रयास करें।

ImageView CanvasView = (ImageView) findViewById(R.id.fashion_pic)

यहाँ से आप अपने खुद के बिटमैप बना सकते हैं और यह एक TouchEvent के बाद फिर से आकर्षित। निम्नलिखित स्निपेट एक आवश्यक काम के आसपास एक बग के लिए 2.1 में शामिल (या 2.2, मुझे याद नहीं):

public void redrawImage() { 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.fashion_pic); 
    Bitmap proxy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Config.ARGB_8888); 
    Canvas c = new Canvas(proxy); 

    //Here, we draw the background image. 
    c.drawBitmap(bm, new Matrix(), null); 

    //Here, we draw the text where the user last touched. 
    c.drawText("Fashion", someGlobalXvariable, someGlobalYvariable, somePaint); 

    CanvasView.setImageBitmap(proxy); 
} 

यहाँ, आप एक कैनवास जो पहले से ही पृष्ठभूमि और पेंट पाठ के रूप में अपनी तस्वीर है बनाया है एक एक्स और वाई चर पर।

CanvasView.setOnTouchListener(new OnTouchListener(){ 

    public boolean onTouch(View v, MotionEvent e) { 

     someGlobalXvariable = e.getX(); 
     someGlobalYvariable = e.getY(); 
     redrawImage(); 
     return true; 
    } 
}); 

आप देख सकते हैं, श्रोता स्वचालित रूप से अपनी छवि को जब यह छुआ है अद्यतन करता है, और पाठ उपयोगकर्ता की अंगुली का अनुसरण करेगा: अब, बस एक OnTouchListener निर्धारित किया है। चूंकि आप अपने कैनवास के रूप में बिटमैप का उपयोग कर रहे हैं, इसलिए यदि आप उस ऐप की कार्यक्षमता चाहते हैं तो आप छवि को सहेजने/लोड करने के लिए समर्थन भी जोड़ सकते हैं।

संपादित करें: ऐसा हो सकता है और अधिक प्रदर्शन के अनुकूल है अगर आप redrawImage() से लाइनों 1-3 ले जाने और उन्हें कहीं और जगह, वैश्विक वस्तुओं के रूप में उन वस्तुओं की स्थापना। मैं आपको इसके साथ टिंकर करने दूँगा।

+0

क्या मुझे कुछ भी रीसायकल करने की आवश्यकता है क्योंकि बिटमैप लगातार यहां खींचा जा रहा है? – Hunt

+0

क्या canvas.drawText के बजाय TextView का उपयोग करना संभव है, क्योंकि टेक्स्ट की गुणवत्ता drawText की तुलना में काफी बेहतर है। – Hunt

+1

प्रश्न 1: मेरा संपादित उत्तर देखें, आपको उन वस्तुओं को कहीं और ले जाना चाहिए। प्रश्न 2: आप Canvas.drawText() के साथ बिल्कुल वही दिख सकते हैं। 'Paint.setAntialiasing()' का उपयोग करने का प्रयास करें – Snailer

संबंधित मुद्दे