可检查的ImageView

teo*_*tik 16 android

有没有人知道是否可以使ImageView可检查.我尝试在我的项目中使用State-list drawable资源,我为ImageView检查状态定义图片,但是没有属性可以使ImageView可检查,只能单击.

也许有人知道解决这个问题的方法吗?

and*_*per 27

使用此自定义ImageView实现(从此处获取):

public class CheckableImageView extends ImageView implements Checkable {
    private boolean mChecked;

    private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };

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

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

    @Override
    public void toggle() {
        setChecked(!mChecked);
    }

    @Override
    public boolean isChecked() {
        return mChecked;
    }

    @Override
    public void setChecked(final boolean checked) {
        if (mChecked == checked)
            return;
        mChecked = checked;
        refreshDrawableState();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我覆盖了在其中调用切换的`performClick()`方法.诀窍. (5认同)
  • 是的,您需要自己切换,或者只是添加在视图中单击它的方法.我没有写点击它.我写它是为了能够切换(可以从外部完成,不一定是通过点击). (3认同)

Abh*_*nav 13

而不是使ImageView可检查,您可以设置一个状态列表drawable作为一个复选框的背景,将自动翻转图像.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checkable="true" android:drawable="@drawable/icon_pressed" /> <!-- pressed -->
    <item android:state_checked="true" android:drawable="@drawable/icon_focused" /> <!-- focused -->
    <item android:drawable="@drawable/icon_default" /> <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)

  • 没关系,我发现如何避免这种影响:<android:button = @ drawable/selector"非常感谢你))) (4认同)
  • 是的,这是很好的选择,但这种方法不允许我摆脱标准的复选框图标.我在背景上看到带有我的图标的复选框图标. (2认同)
  • 除了CheckBox没有属性"adjustViewBounds"之外,这很有效.因此,当我从ImageView更改为CheckBox时,我的图像大小变形.有任何想法吗? (2认同)