2

押されたときに画像ビューの背景に色を付けたい。さまざまな状態(押された状態と押されていない状態)の画像を変更するセレクターでそれを実行しようとしました。ここでの問題は、画像が以前の画像をまったく同じサイズに置き換えて、もっと大きくしたいということです。checkableを実装するカスタムレイアウトを使用し、onCreateDrawableState関数もオーバーロードしようとしましたが、呼び出されませんでした。

助けてください..

これはそれがどのように見えるかです:

押す前に:

ここに画像の説明を入力してください

押した後:

ここに画像の説明を入力してください

これは、アイテムリストのカスタムレイアウトです。

public class ListItem extends RelativeLayout implements Checkable, OnClickListener {

    private View mItemChecked = null;
    private ImageView imageSkinEdit = null;

    /*private static final int[] CHECKED_STATE_SET = {
        android.R.attr.state_pressed
    };*/



    public ListItem(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ListItem(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ListItem(Context context) {
        super(context);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        try {
            mItemChecked = this.findViewById(R.id.itemlist_checkedd);
            imageSkinEdit = (ImageView)this.findViewById(R.id.skinEdit);
            imageSkinEdit.setOnClickListener(this);
        } catch (Exception e) {
        }
    }//onFinishInflate

    @Override
    public boolean isChecked() {
        if(mItemChecked != null) {
            return ((Checkable)mItemChecked).isChecked();
        }
        return false;
    }

    @Override
    public void setChecked(boolean checked) {
        if(mItemChecked != null) {
            if (checked) {
                mItemChecked.setVisibility(View.VISIBLE);
            } else {
                mItemChecked.setVisibility(View.GONE);
            }
        }
    }

    @Override
    public void toggle() {
        if(mItemChecked != null) {
            ((Checkable)mItemChecked).toggle();
        }
    }

    @Override
    public void onClick(View v) {
        final int id = v.getId();
        switch (id) {
            case R.id.skinEdit:
                //handleEdit();
                break;
        }//switch
    }

    @Override
    public int[] onCreateDrawableState(int extraSpace) {
        Log.d("onCreateDrawableState", "onCreateDrawableState");
        return super.onCreateDrawableState(extraSpace + 1);
        /*final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked()) {
            Log.d("ListItem", "isChecked");
            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
        }
        return drawableState;*/
    }
}

セレクター:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/ic_go_edit_pressed" />
    <item
        android:state_pressed="false"
        android:drawable="@drawable/ic_go_edit" />
</selector>

画像ビューXML:

<ImageView
        android:id="@+id/skinEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
        android:scaleType="fitXY"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:src="@drawable/edit_skin_selector" />
4

5 に答える 5

1

最後に、別の方法を使用してそれを行いました。あなたは私の次の質問でそれを見ることができます

于 2012-04-29T09:35:12.150 に答える
1

setChecked の最後で refreshDrawableState() を呼び出してみてください。これにより、 onCreateDrawableState が呼び出されます

  @Override
    public void setChecked(boolean checked) {
        if(mItemChecked != null) {
            if (checked) {
                mItemChecked.setVisibility(View.VISIBLE);
            } else {
                mItemChecked.setVisibility(View.GONE);
            }
        }
            refreshDrawableState();
    }
于 2012-04-05T11:28:44.067 に答える
0

セレクターにもデフォルトの状態を追加する必要があります

于 2012-04-05T11:32:16.050 に答える
0
    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
于 2012-04-05T13:46:26.733 に答える
0

onCreateDrawableState が呼び出されないこと、つまり ListItem にはバックグラウンド ドローアブルがないことがわかっています。

于 2012-04-19T09:48:11.457 に答える