2016-04-25 33 views
8

Ho trovato il collegamento this che indica come ho potuto rendere l'effetto bagliore sul mio ImageButton. Quindi ogni volta che l'utente preme il ImageButton viene chiamata la funzione onTouchEvent() e lì chiamo la funzione setImageBitmap(). Il problema è che questa funzione (setImageBitmap()) sembra non avere alcun effetto.Perché setImageBitmap non ha alcun effetto su ImageButton personalizzato?

ciò che funziona:

1) Finora ho esteso il ImageButton come di seguito

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


} 

Poi all'interno di attività creo Pen (personalizzato ImageButton) esempio, definire setGlow() e chiamare setImageBitmap() da istanza di Pen.

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

cosa non funziona:

1) Tutto come sopra (l'estensione di un'ImageButton in Android), ma questa volta sto chiamando la funzione setImageBitmap dall'interno di onTouchEvent(). Per questo caso ho definire la funzione setGlow in all'interno 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) { 
     .... 
    } 
} 

Poi nel file xml che faccio:

..... 

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

    .... 

Infine nel MainActivity

public class MainActivity extends Activity { 


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

chiamato 'onTouchEvent'? – shhp

+0

@shhp Sì, è – pokche

+0

Vuoi dire se chiami 'setImageBitmap' in' MainActivity', funziona. Tuttavia non funziona in 'onTouchEvent'? – shhp

risposta

3

ho costruito il progetto, come si post, ma funziona bene. Imposta la bitmap correttamente. Quindi forse il metodo getGlow() non funziona bene. Crea alcuni registri come sotto

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

quindi controllare se il ritorno è giusto.

+0

Sì, ha funzionato anche per me .. automaticamente ..ma il problema persiste ancora con il mio progetto originale ... la domanda era la versione stupida del mio progetto però – pokche

+0

Nel progetto originale ho un viewgroup che contiene [viewgroup1 e canvas]. Il gruppo di viste1 contiene pulsanteImmagine (penna) che si desidera illuminare quando l'utente tocca il pulsante – pokche

5

Penso che questo potrebbe essere il classico problema di memoria esaurita. È possibile tenta di utilizzare la bitmap dell'icona launcher se si vuole verificare se questo è vero:

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

Se questo è il problema di controllo questo link.

+0

Non sono sicuro se questo problema di memoria è esaurito dal momento in cui viene eseguito catch (Exception e) { \t // TODO Blocco catch generato automaticamente \t e.printStackTrace(); \t} – pokche

+0

Hai controllato i registri adb? – jobbert

5

Non è possibile farlo perché si esaurirà la memoria se si imposta setImageBitmap (setGlow (R.drawable.pen)) in onTouchEvent.

onTouchEvent verrà attivato tempi di servizio al secondo. E si creeranno bitmap serval in memoria al secondo. Uscirà dalla memoria prima di impostare ImageBitmap correttamente.

+0

perché ciò non accada Ho provato a creare una variabile booleana statica e l'ho inizializzata su true e ho cambiato la variabile in false dopo che è stato chiamato setImageBitmap() – pokche

Problemi correlati