自定义控件(3)---LightingColorFilter光照颜色过滤器--Selector的效果

本文主要是介绍自定义控件(3)---LightingColorFilter光照颜色过滤器--Selector的效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 源码就是博客里的这些文件,没有上传代码,就差一个图片而已,效果类似图片的selector切换


LightingColorFilter顾名思义光照颜色过滤LightingColorFilter (int mul, int add)

mul全称是colorMultiply意为色彩倍增,而add全称是colorAdd意为色彩添加,这两个值都是16进制的色彩值0xAARRGGBB

LightingColorFilter(0xFFFFFFFF, 0x00000000)的时候原图是不会有任何改变的,如果我们想增加红色的值,那么LightingColorFilter(0xFFFFFFFF, 0x00XX0000)就好,其中XX取值为00至FF

0xFFFFFF00  0x表示16进制数,前两个ff表示的是透明度,00-ff,接下来两个ff表示红R,00-ff,后面两个ff表示绿G,00-ff,最后两个ff表示蓝B,00-ff


黑色0x00000000
白色0x00ffffff

 activity_main.xml 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFF"android:orientation="vertical" ><com.aigestudio.customviewdemo.views.CustomViewandroid:id="@+id/main_cv"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

MeasureUtil


package com.aigestudio.customviewdemo.views;import android.app.Activity;
import android.util.DisplayMetrics;/*** 测绘工具类*/
public final class MeasureUtil {/*** 获取屏幕尺寸* * @param activity*            Activity* @return 屏幕尺寸像素值,下标为0的值为宽,下标为1的值为高*/public static int[] getScreenSize(Activity activity) {DisplayMetrics metrics = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);return new int[] { metrics.widthPixels, metrics.heightPixels };}
}

MainActivity


package com.aigestudio.customviewdemo.activities;import android.app.Activity;
import android.os.Bundle;import com.aigestudio.customviewdemo.R;
import com.aigestudio.customviewdemo.views.CustomView;public class MainActivity extends Activity {private CustomView mCustomView;// 我们的自定义View@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取控件mCustomView = (CustomView) findViewById(R.id.main_cv);}
}

CustomView

package com.aigestudio.customviewdemo.views;import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LightingColorFilter;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;import com.aigestudio.customviewdemo.R;public class CustomView extends View {private Paint mPaint;// 画笔private Context mContext;// 上下文环境引用private Bitmap bitmap;// 位图private int x, y;// 位图绘制时左上角的起点坐标private boolean isClick;// 用来标识控件是否被点击过,默认没有被点击 falsepublic CustomView(Context context) {this(context, null);}public CustomView(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;// 初始化画笔initPaint();// 初始化资源initRes(context);this.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {/** 判断控件是否被点击过*/if (isClick) {mPaint.setColorFilter(null);isClick = false;} else {// 点击后变为红色mPaint.setColorFilter(new LightingColorFilter(0xFFFFFFFF,0X00FF0000));isClick = true;}// 记得重绘invalidate();}});}/*** 初始化画笔*/private void initPaint() {// 实例化画笔mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);}/*** 初始化资源*/private void initRes(Context context) {// 获取位图bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.a2);/** 计算位图绘制时左上角的坐标使其位于屏幕中心 屏幕坐标x轴向左偏移位图一半的宽度 屏幕坐标y轴向上偏移位图一半的高度*/x = MeasureUtil.getScreenSize((Activity) mContext)[0] / 2- bitmap.getWidth() / 2;y = MeasureUtil.getScreenSize((Activity) mContext)[1] / 2- bitmap.getHeight() / 2;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 绘制位图canvas.drawBitmap(bitmap, x, y, mPaint);}
}


这篇关于自定义控件(3)---LightingColorFilter光照颜色过滤器--Selector的效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125303

相关文章

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3