欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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;
    }

}