Drawable first 思想使用drawable

以前 使用drawable 都是放在drawable文件夹下,作为背景图的简单使用。后来发现可自定义drawable,而且不用考虑onMeasure,onLayout的重写,只需要考虑onDraw()即可。

drawable相对于view 是轻量级的,使用相对于View 比较简单,因此以后要改掉View first 思想为Drawable First.

下面就是简单自定义drawable的例子:

public class RoundImageDrawable extends Drawable {

 private Bitmap mBitmap ;
 private Paint mPaint;
 private int mWidth;

 public RoundImageDrawable(Bitmap bitmap) {
  this.mBitmap = bitmap;
  //构造渲染器BitmapShader
  BitmapShader mBitmapsShader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);
  mPaint = new Paint();
  mPaint.setAntiAlias(true);
  mPaint.setShader(mBitmapsShader);
  mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());
  
 }

 @Override
 public void draw(Canvas canvas) {
  canvas.drawCircle(mWidth/2, mWidth/2, mWidth/2, mPaint);
 }

 @Override
 public void setAlpha(int alpha) {
  mPaint.setAlpha(alpha);

 }

 @Override
 public void setColorFilter(ColorFilter cf) {
  mPaint.setColorFilter(cf);

 }

 @Override
 public int getOpacity() {
  // TODO Auto-generated method stub
  return PixelFormat.TRANSLUCENT;
 }

 @Override
 public int getIntrinsicWidth() {
  // TODO Auto-generated method stub
  return mWidth;
 }

 @Override
 public int getIntrinsicHeight() {
  // TODO Auto-generated method stub
  return mWidth;
 }

核心代码就是draw了,setAlpha、setColorFilter、getOpacity、draw这几个方法是必须实现的,不过除了draw以为,其他都很简单。getIntrinsicWidth、getIntrinsicHeight主要是为了在View使用wrap_content的时候,提供一下尺寸,默认为-1可不是我们希望的。setBounds就是去设置下绘制的范围。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值