效果如下:

理解: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>

转载于:https://www.cnblogs.com/Free-Thinker/p/6201504.html

Android改变图片颜色的自定义控件相关推荐

  1. Android 使用ColorMatrix改变图片颜色

    ColorMatrix的颜色矩阵介绍 颜色矩阵M是一个5*4的矩阵,在Android中,颜色矩阵M是以一维数组m=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]的方 ...

  2. 使用asp.net改变图片颜色

    最近奇葩经理提出了奇葩的需求,要能在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,尼玛楼主的感受你们不懂!于是有了下面的代码... 用法:调用update_pixelColor方法并传参数 ...

  3. iOS 改变图片颜色

    在做项目的时候碰到了一个需求,把app的主题颜色改变成另外一种颜色,由于没有给出新的素材图片,需要把现有图片的颜色改变一下.下面是改变图片颜色的方法(一般对于单一颜色的图片) imageWithRen ...

  4. OpenCV for Python之改变图片颜色

    OpenCV for Python之改变图片颜色 1.环境 2 直接修改通道值 3.与.或.非.异或操作 Opencv4 官方文档 : https://docs.opencv.org/4.2.0/ O ...

  5. html怎么改变图片亮度,纯干货,前端学者的福音!如何使用css滤镜改变图片颜色...

    原标题:纯干货,前端学者的福音!如何使用css滤镜改变图片颜色 说到对图片进行处理,我们经常会想到PS,美图秀秀这类的图像处理工具.作为前端,全栈开发者,我们经常会需要处理一些特效,例如根据不同的状态 ...

  6. 图片使用css3滤镜改变图片颜色

    图片使用css3滤镜改变图片颜色 使用css3滤镜改变图片的颜色 代码如下 使用css3滤镜改变图片的颜色 我们在开发页面的时候,会遇到同一张图片滑过或点击的时候改变图片背景或颜色,一般情况下UI设计 ...

  7. Android开发——Java代码动态改变图片颜色

    前言 在Android开发当中,我们会遇到多张图片需要改变背景颜色,我们不能用代码写死,但是我们setBackgroundColor方法改变是会被把我们背景变成直角的,但是从用户体验感的角度来讲是带有 ...

  8. Android使用svg格式图片,并改变图片颜色

    1.在iconfont网站上下载svg格式图片,iconfont网站地址:iconfont-阿里巴巴矢量图标库,登录后下载 2.Android studio 在drawable文件夹右击,选择New- ...

  9. android改变图标颜色

    同一个图标,但是可能会有多种背景颜色.比如,标识空气质量的图标,因空气质量有多种情形,对应的图标就有多种背景颜色. 实现这种需求有两种方式: 1.针对每一种情形,切一张对应的图标. 2.只切一张图标, ...

  10. 利用CSS改变图片颜色的100种方法!

    (给前端大全加星标,提升前端技能) 来源: 前端指南 前言 "说到对图片进行处理,我们经常会想到PhotoShop这类的图像处理工具.作为前端开发者,我们经常会需要处理一些特效,例如根据不同 ...

最新文章

  1. python手机版编程-手机编python
  2. 弹出对话框提示输入_每日一贴——如何关闭CAD的各种提示信息和对话框?
  3. 常见RAID的各级别的特性简介(RAID0、1、5、6、10)
  4. linux常用命令:top 命令
  5. 即将放弃python的app_python放弃之 模块和包
  6. 如何在福昕阅读器上将 pdf 文档背景色改为绿豆沙
  7. 哪种存储器是非易失的_非易失性存储器
  8. Unity将相机内容输出成图片
  9. 小程序 - canvas绘制海报
  10. 怎样写一个lemon的spj
  11. 【论文精读】Deep Defocus Map Estimation using Domain Adaptation-2019CVPR
  12. axios 的responseType 类型动态设置
  13. 对计算机的认识与感想
  14. 挤奶牛Crowded Cows 洛谷p3088
  15. 怎么样玩转信息研究方法指南学习笔记
  16. 计算机技术性能指标指的是,计算机主要技术指标通常是指
  17. acr122_ACR的完整形式是什么?
  18. 第17章 有关事务的楔子
  19. Probabilistic Volumetric Fusion for Dense Monocular SLAM
  20. 什么是白马股,它与蓝筹股有什么区别?

热门文章

  1. 收藏:40个Linux运维面试经典基础问题!
  2. 中国最惨创业者的惨痛教训!
  3. android 嵌入web容器,Github最火开源项目-H5和Android通信容器BridgeWebView的使用
  4. 三包围结构的字是什么样的_清桦学书之结构篇——包围结构。
  5. canoe开发从入门到精通_后端java开发工程师学习路线
  6. [jzoj 4528] [GDOI2019模拟2019.3.26] 要换换名字 (最大权闭合子图)
  7. es6箭头函数使用场景导致的一些问题
  8. ARCGIS RUNTIME FOR IOS总结(六)
  9. BZOJ1001 狼抓兔子(网络流转最短路:对偶图)
  10. day 32 半链接、粘包问题、finally