当前位置: 移动技术网 > 移动技术>移动开发>Android > Android_Develop:如何将自定义View里的属性实时传递出来

Android_Develop:如何将自定义View里的属性实时传递出来

2018年12月27日  | 移动技术网移动技术  | 我要评论

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

}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网