Benutzerdefinierte Ansicht reagiert nicht auf Berührungen
Ich habe eine benutzerdefinierte Ansicht erstellt, deren Hintergrundbild beim Drücken, Hervorheben oder Deaktivieren geändert werden soll. Die App wird ausgeführt, aber die Schaltfläche ändert den Hintergrund nicht.
Hier ist mein Code:
<code>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 (e.g. 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); } } } </code>
Hier ist meine XML:
<code><?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> </code>
Etwas, das ich verpasst habe?