转换黑白的加载控件
来源:互联网 发布:路由器访客网络限制 编辑:程序博客网 时间:2024/05/17 06:21
转换黑白的加载控件
看到腾讯动漫的一个加载控件是自己的图标由黑白变成彩色,就研究了一下写了一个类似效果的控件.
为了实现这个效果,开始我觉得用两张bitmap重叠实现最好了,先将一张黑白化,在让两张重叠的现实。后来我发现了 paint的setColorFilter的方法,通过这个方法我们可以轻松渲染出黑白的图片。闲话少说上代码:
public class GraphDrawable extends Drawable { public static int MAX_NUM = 100; private Paint mPaint; private Paint mBPaint; private Bitmap bitmap; private int CurrentNum; private int MaxNum = MAX_NUM; private int height; private int width; private Rect mSrcRect = new Rect(); private Rect mSrcRect2 = new Rect(); private Rect mDesRect = new Rect(); private Rect mDesRect2 = new Rect(); private int colorheight; private int whiteheight; private int colorbitmapheight; private int whitebitmapheight; public GraphDrawable() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBPaint = new Paint(Paint.ANTI_ALIAS_FLAG); ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(new float[]{ 0.33F, 0.59F, 0.11F, 0, 0, 0.33F, 0.59F, 0.11F, 0, 0, 0.33F, 0.59F, 0.11F, 0, 0, 0, 0, 0, 1, 0, }); mBPaint.setColorFilter(colorFilter); } public void setFrame(int height,int width){ this.height = height; this.width = width; } public void setBitmap(Bitmap bitmap){ this.bitmap = bitmap; } public void setPercent(int percentnum){ if(percentnum <= MaxNum) { this.CurrentNum = percentnum; colorbitmapheight = (int)((double)CurrentNum / (double)MaxNum * bitmap.getHeight() ); whitebitmapheight = bitmap.getHeight() - colorbitmapheight; colorheight =(int)((double)colorbitmapheight / (double)bitmap.getHeight() * height ); whiteheight = height - colorheight; Log.d("height","bitmap height : " + whitebitmapheight + "r height : " + whiteheight); } } @Override public void draw(Canvas canvas) { if(bitmap != null) { mSrcRect.set(0, 0, bitmap.getWidth(), whitebitmapheight); mSrcRect2.set(0,whitebitmapheight,bitmap.getWidth(),bitmap.getHeight()); mDesRect.set(0, 0, width, whiteheight); mDesRect2.set(0, whiteheight,width,height); canvas.drawBitmap(bitmap, mSrcRect, mDesRect, mBPaint); canvas.drawBitmap(bitmap,mSrcRect2,mDesRect2,mPaint); } } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter colorFilter) { } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; }}
我将图片的渲染方法放到了GraphDrawable这个类中,而控制展现的在ImageLoadView这个View中
public class ImageLoadView extends View { private GraphDrawable mDrawable; public ImageLoadView(Context context) { super(context); } public ImageLoadView(Context context, AttributeSet attrs) { super(context, attrs); } public ImageLoadView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setImageResource(int id){ mDrawable = new GraphDrawable(); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),id); mDrawable.setBitmap(bitmap); invalidate(); } public void percent(int percent){ mDrawable.setPercent(percent); invalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(mDrawable != null){ mDrawable.setFrame(getHeight(),getWidth()); mDrawable.draw(canvas); } }}
效果如下图
0 0
- 转换黑白的加载控件
- 黑白间转换
- 使用CSS将网站、图片转换成黑白的…
- 彩色图片转换为黑白照片
- 动态的加载控件
- scriptmanage的作用与母板页加载后,控件ID转换后的处理方法
- 舞会的黑白帽子
- 网页变成黑白的
- 黑白棋子的移动
- 黑白棋子的移动
- 黑白棋子的移动
- 黑白棋子的移动
- 黑白棋子的移动
- 永远的黑白
- strust2Interceptor的黑白名单
- 转换控件的坐标系
- Hello Android - Bitmap转换为黑白的灰度图和加圆角效果
- Java对图片的处理---缩放图像、图像切割、图像类型转换、彩色转为黑白
- MediaCodec|文档翻译 结合图示来理解
- 使用coffeescript定时任务下载服务器xml和plist文件解析为json
- hadoop2.5.2学习06--MapReduce原理及操作
- Git学习之路(3)-提交文件到三个区
- 51单片机的IO口驱动能力、灌电流、拉电流、上拉电阻的选择
- 转换黑白的加载控件
- TCP协议总结
- Android中Socket和Http的比较
- Fiddler操作具体实践
- JavaScript小红书读书笔记
- 蓝桥杯历届试题 幸运数
- 【Unity3D】Asset Store 下载的package存在什么地方?
- Android获取文件的MD5值
- Dlib人脸特征点检测(速度优化)