自定义ImageButton实现RadioButton功能需重写哪些方法?
我正在做一个自定义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
相关产品推荐
相关产品推荐

