Android改变图片颜色的自定义控件
效果如下:

理解: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改变图片颜色的自定义控件的更多相关文章
- Android 使用ColorMatrix改变图片颜色
		
原文链接:http://blog.csdn.net/janice0529/article/details/49207939 ColorMatrix的颜色矩阵介绍 颜色矩阵M是一个5*4的矩阵,在And ...
 - Android--ColorMatrix改变图片颜色
		
前言 本篇博客讲解如何通过改变图片像素点RGB的值的方式,在Android中改变图片的颜色.在最后将以一个简单的Demo来作为演示. 本篇博客的主要内容: ColorMatrix 使用ColorMat ...
 - 利用CSS3 filter:drop-shadow实现纯CSS改变图片颜色
		
体验更优排版请移步原文:http://blog.kwin.wang/programming/css3-filter-drop-shadow-change-color.html 之前做项目过程中有时候遇 ...
 - 使用asp.net改变图片颜色
		
最近奇葩经理提出了奇葩的需求,要能在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,尼玛楼主的感受你们不懂!于是有了下面的代码... 用法:调用update_pixelColor方法并传参数 ...
 - Android 改变字体颜色的三种方法
		
在TextView中添加文本时有时需要改变一些文本字体的颜色,今天学到了三种方法,拿出来分享一下 1.在layout文件下的配置xml文件中直接设置字体颜色,通过添加android:textc ...
 - Drawable 添加过滤色,改变图片颜色
		
/** * 更改图片颜色 * @param drawable * @param color * @return */ public Drawable getDrawable(Drawable draw ...
 - Android之图片颜色调节
		
package net.hnjdzy.imagecolor; import android.os.Bundle; import android.app.Activity; import android ...
 - iOS开发笔记--使用blend改变图片颜色
		
最近对Core Animation和Core Graphics的内容东西比较感兴趣,自己之前也在这块相对薄弱,趁此机会也想补习一下这块的内容,所以之后几篇可能都会是对CA和CG学习的记录的文章. 在应 ...
 - Android学习记录(10)—Android之图片颜色处理
		
你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软件,废话不多说了,直接上图,上代码了! 效果图如下: 没处理前: 处理之后: MainActivity.jav ...
 
随机推荐
- Catch Me If You ... Can't Do Otherwise--转载
			
原文地址:https://dzone.com/articles/catch-me-if-you-cant-do-otherwise I don't know whether it's an anti- ...
 - c#的中英文混合字符串截取
			
public class StringHelper { public static string GetSubString(string str, int len) ...
 - error: function declaration isn’t a prototype [-Werror=strict-prototypes]
			
"warning: function declaration isn't a prototype" was caused by the function like that: ...
 - itchat转发指定的微信群里某个用户的发言到指定的群
			
复读机功能, 如果有比较多的用户,超出500人,那就得分开至少两个群,如何把一些消息自动复制到另一个群呢. 自动转发指定用户的发言,转发到别的群 # !/usr/bin/env python # -* ...
 - 有关Canvas的一点小事—图像绘制
			
1. 使用canvas绘制图像 什么是图像?在js中它就是一个<img src=””>,<img>有两种接收图像信息的方法,一个是直接链接到图像地址,一个使用base64数据 ...
 - 7. 基于Express实现接口
			
安装Mongoose 创建model //server/models/goods.js var mongoose = require('mongoose');//优先到node_modeles里加载 ...
 - jfreechart,pdf生成组件iText,jasper report报表组件及POI操作excel等在企业软件开发中常遇到的第三方应用
			
熟悉WEB Service ,Ajax,DWR,JQuery,iBatis等技术,熟练TOMCAT,IIS,JBoss,WebLogic等服务器 图表组件JFreeChart PDF组件-iText的 ...
 - 小贝_redis web管理界面工具安装
			
RedisWEB管理界面工具安装 一.概述 二.文件下载 三.安装过程 一.概述 1.因为redis是基于C/S的方式开发.也就是说,仅仅要满足于redis的client通信要求的,都能够作为redi ...
 - iOS_04_数据类型、常量、变量
			
一.数据 1.什么是数据 * 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据,图片数据,视频数据,还有聊天QQ产生的文 ...
 - 软件——keil的查找,错误,不能跳转到相应的行
			
为什么MDK keil4.7双击搜索结果不能跳转到相应位置 KEIL搜索的时候双击不跳转到相应的位置 为什么keil点击不能跳转到错误处的问题 在keil中,双击Find In Files中某一行, ...