Skip to content Skip to sidebar Skip to footer

Custom Imageview Class Onclick Change Imageresource

I've created a custom ImageView class, and I'm trying to change the imageResource when user click on it, but I'm able to call setImageResource() from that class. Also I'd like to s

Solution 1:

A solution for a custom toggleable ImageView:

Custom attribute in values/attr.xml

<?xml version="1.0" encoding="utf-8"?><resources><declare-styleablename="ToggleImageView"><attrname="low_img"format="reference" /><attrname="high_img"format="reference" /></declare-styleable></resources>

Custom ImageView class:

publicclassToggleImageViewextendsAppCompatImageViewimplementsView.OnClickListener {
    privateDrawable mLowDrawable, mHighDrawable;
    privateboolean isLow = true;

    publicToggleImageView(Context context, @NullableAttributeSet attrs) {
        super(context, attrs);

        // Extract drawables from custom attributesTypedArray values = context.obtainStyledAttributes(attrs, R.styleable.ToggleImageView);
        setLowDrawable(values.getDrawable(R.styleable.ToggleImageView_low_img));
        setHighDrawable(values.getDrawable(R.styleable.ToggleImageView_high_img));
        values.recycle();

        setImageDrawable(mLowDrawable);

        super.setOnClickListener(this);
    }

    publicvoidsetLowDrawable(Drawable drawable) {
        mLowDrawable = drawable;

        if (isLow)
            setImageDrawable(mLowDrawable);
    }

    publicvoidsetHighDrawable(Drawable drawable) {
        mHighDrawable = drawable;

        if (!isLow)
            setImageDrawable(mHighDrawable);
    }

    @OverridepublicvoidsetOnClickListener(@Nullable OnClickListener l) {
        // Do nothing to block setting listener from outer caller
    }

    @OverridepublicvoidonClick(View view) {
        toggle();
    }

    publicvoidtoggle() {
        isLow = !isLow;

        setImageDrawable(isLow ? mLowDrawable : mHighDrawable);
    }
}

Usage in xml layout:

<?xml version="1.0" encoding="utf-8" ?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/root_container"android:layout_width="match_parent"android:layout_height="match_parent"><com.example.tamhuynh.testfragment.ToggleImageViewandroid:id="@+id/toggle_img"android:layout_width="100dp"android:layout_height="100dp"android:layout_gravity="center"app:high_img="@mipmap/high_drawable"app:low_img="@drawable/low_drawable"tools:low_img="@drawable/low_drawable" /></FrameLayout>

Post a Comment for "Custom Imageview Class Onclick Change Imageresource"