Android-自定义Drawable

自定义Drawable需要继承Drawable类,并且重写draw(),setAlpha(),setColorFilter,getOpacity()这四个方法。

public class RoundDrawable extends Drawable {
    @Override
    public void draw(@NonNull Canvas canvas) {

    }
    @Override
    public void setAlpha(int alpha) {

    }
    @Override
    public void setColorFilter(@Nullable ColorFilter colorFilter) {

    }
    @Override
    public int getOpacity() {
        return 0;
    }

    final public class RoundConstantState extends ConstantState{


        @NonNull
        @Override
        public Drawable newDrawable() {
            return null;
        }
        @Override
        public int getChangingConfigurations() {
            return 0;
        }
    }
}

1、draw
draw方法我们已经非常熟悉了。再需要绘制图像时,会调用这个方法。Canvas是画布的意思,所以的绘制操作都会由它来完成。在前面一篇博客介绍的项目中,是调用mLoadingRender.draw(canvas);来实现的。
2、setAlpha
这是一个设置透明度的方法。如果设置了透明度,那么可以传递给画笔Paint,前一篇的项目中是在Render中调用了mPaint.setAlpha(alpha);方法。0(0x00)表示完全透明,255(0xFF)表示完全不透明。
3、setColorFilter
如果一个Drawable设置了一个颜色过滤器,那么在绘制出来之前,被绘制内容的每一个像素都会被颜色过滤器改变。项目在Render中调用了mPaint.setColorFilter(cf);方法。ColorFilter是一个抽象类,他有一个比较好用的子类ColorMatrixColorFilter,我们可以通过设置颜色颜色举证来改变最终的显示效果。但是这里主要介绍Drawable,ColorFilter这里不展开讲。
4、getOpacity
这个方法的意思是获得不透明度。 有几个值:PixelFormat:UNKNOWN,TRANSLUCENT,TRANSPARENT,或者 OPAQUE。
~OPAQUE:便是完全不透明,遮盖在他下面的所有内容
~TRANSPARENT:透明,完全不显示任何东西
~TRANSLUCENT:只有绘制的地方才覆盖底下的内容。
这个值,可以根据setAlpha中设置的值进行调整。比如,alpha == 0时设置为PixelFormat.TRANSPARENT。在alpha == 255时设置为PixelFormat.OPAQUE。在其他时候设置为PixelFormat.TRANSLUCENT。

参考:https://www.jianshu.com/p/4e5c66a73259

你可能感兴趣的:(Android-自定义Drawable)