2016-04-25 18 views
8

Ich fand this Link, der angibt, wie ich den Leuchteffekt auf meinem ImageButton machen könnte. Also, wann immer der Benutzer die ImageButton Funktion drückt, wird die onTouchEvent() Funktion aufgerufen und dort rufe ich die setImageBitmap() Funktion an. Das Problem ist, dass diese Funktion (setImageBitmap()) überhaupt keine Wirkung hat.Warum hat setImageBitmap keine Auswirkungen auf benutzerdefiniertes ImageButton?

Was funktioniert:

1) Bisher habe ich die ImageButton wie unten

// 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; 
    } 


} 

dann innerhalb Aktivität erweitert ich schaffen Pen (custom ImageButton) Beispiel definieren setGlow() und setImageBitmap() von Instanz Pen nennen.

//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) { 
     ...... 
} 

Was nicht funktioniert:

1) alle gleiche wie oben (eine Image in android erstreckt), aber dieses Mal rufe ich die setImageBitmap Funktion von innen onTouchEvent(). Für diesen Fall habe ich setGlow Funktion im Innen 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) { 
     .... 
    } 
} 

dann in XML-Datei definieren tun I:

..... 

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

    .... 

schließlich in MainActivity

public class MainActivity extends Activity { 


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

Wird 'onTouchEvent' aufgerufen? – shhp

+0

@shhp Ja, es ist – pokche

+0

Sie meinen, wenn Sie 'setImageBitmap' in' MainActivity' aufrufen, funktioniert es. Es funktioniert jedoch nicht in 'onTouchEvent'? – shhp

Antwort

3

ich das Projekt, wie Sie gebaut Post, aber es funktioniert gut. Es setzt das Bitmap korrekt. Vielleicht funktioniert die getGlow() Methode nicht gut. Machen Sie einige Protokolle wie unten

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

dann überprüfen Sie, ob die Rückkehr richtig ist.

+0

Ja Es hat auch bei mir automatisch funktioniert ..aber das Problem besteht immer noch mit meinem ursprünglichen Projekt ... die Frage war die dumme Down-Version meines Projekts obwohl – pokche

+0

Im ursprünglichen Projekt habe ich Viewgroup, die [viewgroup1 und Canvas] enthält. Die viewgroup1 enthält buttonImage (Stift), die leuchten wollte, wenn Benutzer die Schaltfläche berühren – pokche

5

Ich denke, das könnte der Klassiker sein. Sie können versuchen, das Bitmap des Launcher-Symbol zu verwenden, wenn Sie überprüfen möchten, ob das wahr ist:

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) { 
     .... 
    } 
} 

Wenn dies das Problem Prüfung dieses link ist.

+0

Ich bin nicht sicher, ob dies nicht genügend Speicherplatz ist, da catch ich tue (Ausnahme e) { \t // TODO Automatisch generierter Catch-Block \t e.printStackTrace(); \t} – pokche

+0

Haben Sie die AdB-Protokolle überprüft? – jobbert

5

Sie können das nicht tun, weil Sie nicht genügend Arbeitsspeicher haben, wenn Sie setImageBitmap (setGlow (R.drawable.pen)) in onTouchEvent setzen.

onTouchEvent wird serval Mal pro Sekunde ausgelöst. Und Sie werden Serval Bitmaps im Speicher pro Sekunde erstellen. Es wird nicht genügend Arbeitsspeicher, bevor Sie ImageBitmap erfolgreich setzen.

+0

um dies nicht zu geschehen, habe ich versucht, eine statische boolesche Variable zu erstellen und sie auf true zu initialisieren und die Variable nach dem Aufruf von setImageBitmap() auf false zu setzen – pokche