Android_Develop:如何将自定义View里的属性实时传递出来
程序员文章站
2022-03-25 08:00:54
【android_develop】将自定义view里的属性实时传递出来
1、在你的自定义view里创建一个接口。
public interface getrgblistener{
vo...
【android_develop】将自定义view里的属性实时传递出来
1、在你的自定义view里创建一个接口。
public interface getrgblistener{ void onrgbchanged(int red,int green,int blue); }
2、类成员变量里声明一个这个接口的引用。
getrgblistener getrgblistener;
3、写一个方法获取并持有activity实现的接口的实例
public void setrgbcolor(getrgblistener getrgblistener){ this.getrgblistener = getrgblistener; }
4、在activity里实现这个接口,可以看到,这里使用了自定义view的rgb值
/** * 圆环控件接口实现,获取圆环中的数据,并设置背景实时改变 */ private rotatecircle.getrgblistener getrgblistener = new rotatecircle.getrgblistener() { @override public void onrgbchanged(int red, int green, int blue) { getcirclergb(selected,red,green,blue); setbgcolor(red,green,blue,bg); } };
5、activity里绑定xml里的自定义view属性,并向xml创建的自定义view对象传递activity实现的接口对象。
@bind(r.id.island_atmo_circle) rotatecircle rotatecircle; @override protected void initview() { super.initview(); rotatecircle.setrgbcolor(getrgblistener); }
这样,你就可以实时获取自定义view的属性值,自定义view完整代码如下:
public class rotatecircle extends appcompatimageview { public rotatecircle(context context) { super(context); init(); } public rotatecircle(context context, attributeset attrs) { super(context, attrs); init(); } public rotatecircle(context context, attributeset attrs, int defstyleattr) { super(context, attrs, defstyleattr); init(); } private void init() { paint = new paint(); } @override protected void onmeasure(int widthmeasurespec, int heightmeasurespec) { super.onmeasure(widthmeasurespec, heightmeasurespec); } @override protected void ondraw(canvas canvas) { super.ondraw(canvas); } @override public boolean ontouchevent(motionevent event) { invalidate(); switch (event.getaction()) { case motionevent.action_down://手指按下 return true; case motionevent.action_move://手指移动 int r = color.red(color); int g = color.green(color); int b = color.blue(color); getrgblistener.onrgbchanged(r,g,b); invalidate(); } case motionevent.action_up://手指离开 break; default: break; } return super.ontouchevent(event); } public interface getrgblistener{ void onrgbchanged(int red,int green,int blue); } public void setrgbcolor(getrgblistener getrgblistener){ this.getrgblistener = getrgblistener; } }