Android改变图片颜色的自定义控件
2016-12-20 10:00
447 查看
效果如下:
理解:Xfermode的16总模式如图
第一步:
第二步
理解:Xfermode的16总模式如图
第一步:
package com.rong.activity; import com.rong.test.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; /** * 改变图片颜色的自定义View * @author 徐荣 * */ public class ChangeImageColorView extends View { Paint mPaint; PorterDuffXfermode xfermode; Bitmap bitmap; int mBitWidth; int mBitHeight; int width; int height; Rect srcRect; Rect dstRect; RectF mRect; int i=0; public ChangeImageColorView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView() { // 初始化画笔 mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLUE); // 设置Xfermode xfermode = new PorterDuffXfermode(Mode.SRC_IN); // 获取图片源 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.robot); mBitWidth = bitmap.getWidth(); mBitHeight = bitmap.getHeight(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); //获取控件的宽高 width = w; height = h; srcRect = new Rect(0, 0, width, height); dstRect = new Rect(0, 0, width, height); mRect = new RectF(0, 0, width, height); i=width; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //相当于PS的新建图层 int num = canvas.saveLayer(0, 0, width, height, mPaint, Canvas.ALL_SAVE_FLAG); //绘制图片 canvas.drawBitmap(bitmap, srcRect, dstRect, mPaint); //设置图片混合模式 mPaint.setXfermode(xfermode); //绘制动态区域 canvas.drawRect(mRect, mPaint); //恢复混合模式 mPaint.setXfermode(null); //合并图层 canvas.restoreToCount(num); //更改区域的位置 i = i - 1; mRect.top = i; if (i == 0) { i = width; } //刷新UI,他会调用onDraw方法 invalidate(); } }
第二步
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_touchlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical" > <com.rong.activity.ChangeImageColorView android:id="@+id/main_percentview" android:layout_width="100dp" android:layout_height="100dp" android:layout_centerInParent="true" /> </RelativeLayout>
相关文章推荐
- Android改变图片背景颜色tint(着色)或 backgroundTint
- Android改变图片颜色及设置动画
- android改变图片选中颜色
- android textview改变部分文字的颜色和string.xml中文字的替换及部分内容设置颜色、字体、超链接、图片
- Android自定义控件提供颜色属性动态改变控件颜色
- Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法
- Android 使用ColorMatrix改变图片颜色
- Android--ColorMatrix改变图片颜色
- Android Toolbar使用系统原生返回键,并改变其颜色,自定义图片替换系统原生返回键
- 纯css svg 改变图片颜色 ios android 小程序
- android 动态改变图片颜色
- ios客户端学习-ios及android改变图片颜色的方法
- android 改变ImageView的图片非透明颜色变成某一种特定的颜色
- Android 使用ColorMatrix改变图片颜色
- Android Toolbar使用系统原生返回键,并改变其颜色,自定义图片替换系统原生返回键
- android 在 button、textview等控件按下和选中的时候改变颜色或图片实现方法
- Android 使用颜色矩阵改变图片颜色,透明度,亮度
- android 改变图片 字体颜色
- android listView 改变选中行的 字体颜色和 图片
- Android自定义控件----YluoTextView可以改变Drawable大小颜色的TextView