Visualizzazione personalizzata non rispondere ai tocchi

Ho creato una vista personalizzata che dovrebbe cambiare l'image di background quando viene premuto, evidenziato o disabilitato. L'applicazione viene eseguita ma il button non cambia lo background.

ecco il mio codice:

  • errore di android databinding: l'esecuzione non è rioutput per l'attività ': app: dataBindingProcessLayoutsDebug'
  • Come posso creare dynamicmente elementi di menu?
  • Come get l'altezza di LinearLayout
  • Inviare i parametri formattati-urlati nel post-richiesta android volley
  • RecyclerView LayoutManager diversi contatti di span su diverse righe
  • Problema di connessione a servlet Dal client Android
  • public class CustomImageButton extends View { public CustomImageButton(Context context) { super(context); setFocusable(true); setClickable(true); } public CustomImageButton(Context context, AttributeSet attrs) { super(context, attrs); setFocusable(true); setClickable(true); } public CustomImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setFocusable(true); setClickable(true); } protected Drawable background = super.getBackground(); @Override public void setBackgroundDrawable(Drawable d) { // Replace the original background drawable (eg image) with a LayerDrawable that // contains the original drawable slightly edited. CustomImageButtonBackgroundDrawable layer = new CustomImageButtonBackgroundDrawable(d); super.setBackgroundDrawable(layer); } public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int drawableWidth = super.getBackground().getMinimumWidth(); int drawableHeight = super.getBackground().getMinimumHeight(); setMeasuredDimension(drawableWidth, drawableHeight); } protected class CustomImageButtonBackgroundDrawable extends LayerDrawable { protected Drawable lowerlayer; protected Drawable _highlightedDrawable; protected int _disabledAlpha = 100; protected Drawable _pressedDrawable; public CustomImageButtonBackgroundDrawable(Drawable d) { super(new Drawable[] { d }); } @Override protected boolean onStateChange(int[] states) { boolean enabled = false; boolean highlighted = false; boolean pressed = false; for (int state : states) { if (state == android.R.attr.state_enabled) enabled = true; else if (state == android.R.attr.state_selected) highlighted = true; else if (state == android.R.attr.state_pressed) pressed = true; } mutate(); if (enabled && highlighted) { ColorFilter colourFilter = new LightingColorFilter(Color.YELLOW, 1); ScaleDrawable resizedImage = new ScaleDrawable(background, 0, 1.25f, 1.25f); lowerlayer = resizedImage.getDrawable(); lowerlayer.setColorFilter(colourFilter); Drawable[] aD = new Drawable[2]; aD[0] = lowerlayer; aD[1] = background; LayerDrawable _highlightedDrawable = new LayerDrawable(aD); setBackgroundDrawable(_highlightedDrawable); // buttons need transparent backgrounds } else if (!enabled) { setColorFilter(null); setAlpha(_disabledAlpha); } else if (enabled && pressed){ ScaleDrawable smaller = new ScaleDrawable(background, 0, 0.75f, 0.75f); setBackgroundDrawable(smaller.getDrawable()); } else if(enabled){ setBackgroundDrawable(background); setColorFilter(null); } invalidateSelf(); return super.onStateChange(states); } } } 

    Ecco il mio xml:

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff"> <ImageButton android:id="@+id/title" android:layout_width="250dp" android:layout_height="58dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_margin ="25dp" android:background="@drawable/skintonetitle" /> <custombuttons.CustomImageButton android:id="@+id/skina1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/title" android:layout_below="@+id/title" android:layout_marginTop="35dp" android:background="@drawable/test_circle" android:clickable="true" android:focusable="true" /> </RelativeLayout> 

    Qualcosa che ho perso?

  • Prendi il classpath per il progetto gradle usando il plugin Android
  • Prendi la mia posizione
  • Adapter ListView Android notifyDataSetInvalidated () vs notifyDataSetChanged ()
  • Android, il modo migliore per fornire costanti specifiche app in un progetto di libreria?
  • Non get il valore aggiornato della preferenza condivisa nel servizio
  • Qual è il modo più veloce per eseguire test di unità in Android?
  • One Solution collect form web for “Visualizzazione personalizzata non rispondere ai tocchi”

    Si estende dalla visualizzazione, non il button, quindi non è ansible eseguire la scalabilità o la messa a fuoco per impostazione predefinita. Regolare con

     android:clickable="true" android:focusable="true" 

    nel tuo XML.

    È anche ansible impostare questi nel constructor della class di visualizzazione se si desidera farlo in java:

     setFocusable(true); setClickable(true); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.