Android改变图片颜色的自定义控件(十)

效果如下:

理解:Xfermode的16总模式如图

第一步:

1package com.rong.activity; 2 3import com.rong.test.R; 4 5import android.content.Context; 6import android.graphics.Bitmap; 7import android.graphics.BitmapFactory; 8import android.graphics.Canvas; 9import android.graphics.Color; 10import android.graphics.Paint; 11import android.graphics.PorterDuff.Mode; 12import android.graphics.PorterDuffXfermode; 13import android.graphics.Rect; 14import android.graphics.RectF; 15import android.util.AttributeSet; 16import android.view.View; 17/** 18 * 改变图片颜色的自定义View 19 * @author 徐荣 20 * 21 */ 22public class ChangeImageColorView extends View { 23 Paint mPaint; 24 PorterDuffXfermode xfermode; 25 Bitmap bitmap; 26 int mBitWidth; 27 int mBitHeight; 28 int width; 29 int height; 30 Rect srcRect; 31 Rect dstRect; 32 RectF mRect; 33 int i=0; 34 35 public ChangeImageColorView(Context context, AttributeSet attrs) { 36 super(context, attrs); 37 initView(); 38 } 39 40 private void initView() { 41 // 初始化画笔 42 mPaint = new Paint(); 43 mPaint.setAntiAlias(true); 44 mPaint.setColor(Color.BLUE); 45 // 设置Xfermode 46 xfermode = new PorterDuffXfermode(Mode.SRC_IN); 47 // 获取图片源 48 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.robot); 49 mBitWidth = bitmap.getWidth(); 50 mBitHeight = bitmap.getHeight(); 51 52 } 53 54 @Override 55 protected void onSizeChanged(int w, int h, int oldw, int oldh) { 56 super.onSizeChanged(w, h, oldw, oldh); 57 //获取控件的宽高 58 width = w; 59 height = h; 60 srcRect = new Rect(0, 0, width, height); 61 dstRect = new Rect(0, 0, width, height); 62 mRect = new RectF(0, 0, width, height); 63 i=width; 64 } 65 66 @Override 67 protected void onDraw(Canvas canvas) { 68 super.onDraw(canvas); 69 //相当于PS的新建图层 70 int num = canvas.saveLayer(0, 0, width, height, mPaint, Canvas.ALL_SAVE_FLAG); 71 //绘制图片 72 canvas.drawBitmap(bitmap, srcRect, dstRect, mPaint); 73 //设置图片混合模式 74 mPaint.setXfermode(xfermode); 75 //绘制动态区域 76 canvas.drawRect(mRect, mPaint); 77 //恢复混合模式 78 mPaint.setXfermode(null); 79 //合并图层 80 canvas.restoreToCount(num); 81 //更改区域的位置 82= i - 1; 83 mRect.top = i; 84 if (== 0) { 85= width; 86 } 87 //刷新UI,他会调用onDraw方法 88 invalidate(); 89 } 90 91}

第二步

1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3    android:id="@+id/main_touchlayout" 4    android:layout_width="match_parent" 5    android:layout_height="match_parent" 6    android:background="#ffffff" 7    android:orientation="vertical" > 8 9    <com.rong.activity.ChangeImageColorView 10        android:id="@+id/main_percentview" 11        android:layout_width="100dp" 12        android:layout_height="100dp" 13        android:layout_centerInParent="true" /> 14 15</RelativeLayout>

Run

点赞
收藏

评论区

加载中...

相关推荐

H5接入app准入报告

功能标准!(http://static.oschina.net/uploads/space/2016/0725/160658_qiJY_1032182.png)!(http://static.oschina.net/uploads/space/2016/0725/160850_gQgJ_1032182.png)iPhone性能标准!

(适用于)ios 搜索标签列表 商城规格标签列表

效果图: 按钮黑色背景为不可交互 黄色为点击时候的效果 白色为默认颜色!(http://static.oschina.net/uploads/space/2016/0324/231202_f4IS_1186234.gif)h文件////  HomeTagView.h//  YangLand

15道非常经典的Java面试题

试题如下:!(http://static.oschina.net/uploads/space/2016/0729/022902_IBMr_121944.jpg)!(http://static.oschina.net/uploads/space/2016/0729/022923_Exeo_121944.jpg)!(http://static.o

AngularJS 学习笔记 (六) 基本概念和用法 之 Service与Provider

1、使用$http服务!(http://static.oschina.net/uploads/space/2016/0623/092916_7mPM_199513.gif)HTML代码:!(http://static.oschina.net/uploads/space/2016/0623/093044_Y

Num71 资金债权匹配(撮合)

待匹配资金查询分析:!(http://static.oschina.net/uploads/space/2016/0712/224621_yxKh_2356966.png)待匹配资金查询表结构分析:!(http://static.oschina.net/uploads/space/20

POI

!(http://static.oschina.net/uploads/space/2016/0120/131416_Dswb_1444646.png)!(http://static.oschina.net/uploads/space/2016/0120/131416_cIpL_1444646.jpg)ApachePOI是Apache(