2016-04-25 12 views
8

मुझे this लिंक मिला जो बताता है कि मैं अपने ImageButton पर चमक प्रभाव कैसे बना सकता हूं। इसलिए जब भी उपयोगकर्ता ImageButton दबाता है onTouchEvent() फ़ंक्शन को कॉल किया जाता है और वहां मैं setImageBitmap() फ़ंक्शन को कॉल करता हूं। समस्या यह है कि यह फ़ंक्शन (setImageBitmap()) का कोई प्रभाव नहीं पड़ता है।कस्टम इमेजबटन पर setImageBitmap का कोई प्रभाव क्यों नहीं है?

क्या काम करता है:

1) अब तक मैं

// Pen.java 
public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     return true; 
    } 


} 
गतिविधि के अंदर

फिर नीचे के रूप में ImageButton बढ़ाया मैं बनाने Pen (कस्टम ImageButton) उदाहरण, setGlow() को परिभाषित करने और Pen के कहने से setImageBitmap() कहते हैं।

//MainActivity.java

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Pen myImgbutton; 
     myImgbutton = (Pen) findViewById(R.id.pen); 

     myImgbutton.setImageBitmap(setGlow(R.drawable.pen)); 

    } 
} 

public Bitmap setGlow(int resourceId) { 
     ...... 
} 

क्या काम नहीं करता:

1) ऊपर (एंड्रॉयड में एक ImageButton विस्तार) के रूप में सभी एक ही, लेकिन इस बार मैं setImageBitmap समारोह बोल रहा हूँ अंदर से टचएवेंट()। मैं आप के रूप में परियोजना का निर्माण किया

..... 

    <com.example.testsetimagebmp.Pen 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/pen" 
     android:background="@drawable/pen" /> 

    .... 
अंत में MainActivity में

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
    // .... 
} 
+0

'ऑन टचवेन्ट' कहा जाता है? – shhp

+0

@shhp हां यह – pokche

+0

है यदि आप 'MainActivity' में 'setImageBitmap' को कॉल करते हैं, तो इसका मतलब है कि यह काम करता है। हालांकि यह 'onTouchEvent' में काम नहीं करता है? – shhp

उत्तर

3

: इस मामले के लिए मैं मैं करता हूँ तो xml फ़ाइल में Pen.java अंदर

// Pen.java 
public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     // Here I say to apply the glow effect to the image 
     setImageBitmap(setGlow(R.drawable.pen)); 
     return true; 
    } 

    public Bitmap setGlow(int resourceId) { 
     .... 
    } 
} 

में setGlow समारोह को परिभाषित किया है पोस्ट करें, लेकिन यह ठीक काम करता है। यह बिटमैप को सही ढंग से सेट करता है। तो शायद getGlow() विधि अच्छी तरह से काम नहीं करता है। के रूप में

नीचे
public Bitmap setGlow(int resourceId) { 
    Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId); 
    Log.e("tag", "Size: " + bm.getByteCount()); 
    return bm; 
} 

तो यह देखना होगा कि वापसी सही है कुछ लॉग्स करें।

+0

हाँ यह मेरे लिए भी काम करता है .. स्वचालित रूप से ..लेकिन समस्या अभी भी मेरी मूल परियोजना के साथ बनी हुई है ... प्रश्न मेरे प्रोजेक्ट का गूंगा संस्करण था हालांकि – pokche

+0

मूल प्रोजेक्ट में मेरे पास व्यूग्रुप है जिसमें [व्यू ग्रुप 1 और कैनवास] शामिल है। viewgroup1 शामिल buttonImage (कलम) है जो उपयोगकर्ता द्वारा बटन – pokche

5

मुझे लगता है कि यह स्मृति समस्या का क्लासिक आउट हो सकता है। इस समस्या की जांच इस link है

public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     // Here I say to apply the glow effect to the image 
     setImageBitmap(setGlow(R.mipmap.ic_launcher)); 
     return true; 
    } 

    public Bitmap setGlow(int resourceId) { 
     .... 
    } 
} 

: आप कि क्या यह सच है की जाँच करना चाहते हैं तो लॉन्चर आइकन के बिटमैप इस्तेमाल करने की कोशिश कर सकते हैं।

+0

मुझे यकीन है कि नहीं कर रहा हूँ स्पर्श करता है, तो यह पकड़ मुझे क्या करना (अपवाद ई) { \t // TODO स्वत: निर्मित कैच ब्लॉक के बाद से स्मृति मुद्दे से बाहर है चमक करना चाहता था \t e.printStackTrace(); \t} – pokche

+0

क्या आपने एडीबी लॉग की जांच की है? – jobbert

5

आप ऐसा नहीं कर सकते हैं क्योंकि अगर आप setImageBitmap (setGlow (R.drawable.pen)) को टचएवेंट में डालते हैं तो आप स्मृति से बाहर होंगे।

ऑन टचएवेंट प्रति सेकेंड सर्वल समय ट्रिगर किया जाएगा। और आप प्रति सेकेंड मेमोरी में सर्वल बिटमैप्स बनाएंगे। यह आपके द्वारा सेट किए जाने से पहले स्मृति से बाहर हो जाएगा।

+0

ऐसा नहीं होने के लिए मैंने एक स्थिर बूलियन वैरिएबल बनाने की कोशिश की और इसे सत्य में शुरू किया और सेट इमेजबिटमैप() को कॉल करने के बाद चर को बदल दिया – pokche

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