You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义ImageButton实现RadioButton功能需重写哪些方法?

自定义带RadioButton逻辑的ImageButton实现疑问

我正在做一个自定义View,本质是给ImageButton加上RadioButton的选中逻辑。具体需求是:

  • 点击按钮时切换显示的图片
  • 标记内部的选中状态为true
  • 调用接口通知所属的RadioGroup取消其他同组视图的选中状态
  • 核心要求:完全不影响ImageButton原有的所有行为

我之前只跟着教程做过一次自定义View,View里涉及点击、触摸的方法太多了,比如onTouch、onClick、MotionEvent这些,搞得我有点懵。我自己能写接口,但不确定该怎么修改ImageButton的逻辑才合适。

想请教各位:我需要重写哪些方法才能实现上述功能,同时既不破坏ImageButton原有行为,也不影响外部设置OnTouchListener执行额外操作的能力?如果重写方法会影响原有行为,需要加什么代码恢复?

现有代码

public class RadioImageButton extends AppCompatImageButton implements RadioCheckable {
    //Default constructor
    public RadioImageButton(Context context) {
        super(context);
        initView();
    }

    //Constructor with defined attributes
    public RadioImageButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        parseAttributes();
        initView();
    }

    //Constructor with defined attributes and attributes taken from style defaults that aren't defined
    public RadioImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //=========================================================================
    // Setup
    //=========================================================================
    private void initView() {
    }

    private void parseAttributes() {
    }
}

我预想的实现思路

...// 上面已有的代码
private boolean mChecked = false;

@Override
void onClick(...) {
    mChecked = true;
    setImageResource(R.example.checked_image); // 或者也可以用selector资源
    *调用Radio相关的接口*;
    mOnTouchListener.onTouch(v, event); // 处理用户设置的OnTouchListener
}
...

但我知道实际实现肯定没这么简单,这样写大概率会出问题。

我之前尝试找默认ImageButton的源码参考,但找到的内容几乎全是注释,没什么有效代码,帮助不大。

希望能得到简洁实现这个功能的建议,多谢了!


编辑:
@pskink - 看了你提供的代码,它似乎是生成矩阵来转换Drawable(src),让它在保持宽高比并居中(ScaleToFit.CENTER)的情况下适配目标矩形(dst)。我觉得目标矩形应该是RadioButton的视图边界,但调试重写的draw()方法时,效果和预期不符,我不太确定canvas.concat(matrix)的执行逻辑,可能是我用错了方式。

内容的提问来源于stack exchange,提问作者oblivioncth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:05:20