Android实现炫酷的星空变幻效果

二话不说,先上效果图:


这个图是什么意思呢,有没有看到一直在变颜色啊,有没有很像星云变幻呢,有没有很炫,快来看看怎么实现的吧!


这是我们要被处理的原图,实现方式就是通过不断的改变这张图的色相从而达到效果:


贴布局文件:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/image"android:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/nightfall_starlight_panoramic9"android:scaleType="centerCrop" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="vertical"android:padding="10dp"android:visibility="visible" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="色相"android:textAppearance="?android:attr/textAppearanceSmall" /><SeekBarandroid:id="@+id/hue"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="饱和度"android:textAppearance="?android:attr/textAppearanceSmall" /><SeekBarandroid:id="@+id/saturation"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="明度"android:textAppearance="?android:attr/textAppearanceSmall" /><SeekBarandroid:id="@+id/lum"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal" ><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="start"android:text="start"android:visibility="visible" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="reset"android:text="reset"android:visibility="visible" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="stop"android:text="stop"android:visibility="visible" /></LinearLayout></LinearLayout>


贴实现代码:

package com.sahadev;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;import com.lidroid.xutils.view.annotation.ViewInject;public class MainActivity3 extends Activity implements OnSeekBarChangeListener, Runnable {@ViewInject(R.id.hue)SeekBar hue;@ViewInject(R.id.saturation)SeekBar saturation;@ViewInject(R.id.lum)SeekBar lum;@ViewInject(R.id.image)ImageView image;// 颜色的最大值255,中间值127private final static int MAX_VALUE = 255, MID_VALUE = 127;// 临时 色相,饱和度,明度private float mHue, mSaturation, mLum;// 被处理的图像private Bitmap bitmap;// 临时变换值private int tempValue = MID_VALUE;// 运行标志位private boolean runFlag;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.primary_color);com.lidroid.xutils.ViewUtils.inject(this);// 将图片缩放到屏幕的适合尺寸bitmap = MainActivity.scaleImage(this, R.drawable.nightfall_starlight_panoramic9);// 事件绑定hue.setOnSeekBarChangeListener(this);saturation.setOnSeekBarChangeListener(this);lum.setOnSeekBarChangeListener(this);// 进行初始化状态hue.setMax(MAX_VALUE);saturation.setMax(MAX_VALUE);lum.setMax(MAX_VALUE);reset(null);image.setImageBitmap(bitmap);}/** 进行循环任务* * @see java.lang.Runnable#run()*/@Overridepublic void run() {hue.setProgress(tempValue++);if (tempValue == MAX_VALUE) {tempValue = 0;}if (!runFlag) {return;}image.postDelayed(this, 10);}/*** 停止循环* * @param view*/public void stop(View view) {runFlag = false;}/*** 开始循环滚动* * @param view*/public void start(View view) {runFlag = true;image.postDelayed(this, 100);}/*** 重置* * @param view*/public void reset(View view) {hue.setProgress(MID_VALUE);saturation.setProgress(MID_VALUE);lum.setProgress(MID_VALUE);tempValue = MID_VALUE;}/** 根据Seekbar的进度控制图片的效果*/@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {switch (seekBar.getId()) {case R.id.hue:mHue = (progress - MID_VALUE) * 1.0f / MID_VALUE * 180;break;case R.id.saturation:mSaturation = progress * 1.0f / MID_VALUE;break;case R.id.lum:mLum = progress * 1.0f / MID_VALUE;break;default:break;}image.setImageBitmap(ImageHelper.handleImageEffect(bitmap, mHue, mSaturation, mLum));}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}public static class ImageHelper {/*** 处理图像* * @param bitmap*            原图* @param degrees*            色相值* @param sat*            饱和度值* @param lum*            明度值* @return 处理后的图像* */public static Bitmap handleImageEffect(Bitmap bitmap, float degrees, float sat, float lum) {Bitmap temp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(temp);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);// 设置色相ColorMatrix hueMatrix = new ColorMatrix();hueMatrix.setRotate(0, degrees);hueMatrix.setRotate(1, degrees);hueMatrix.setRotate(2, degrees);// 设置饱和度ColorMatrix saturationMatrix = new ColorMatrix();saturationMatrix.setSaturation(sat);// 设置明度ColorMatrix lumMatrix = new ColorMatrix();lumMatrix.setScale(lum, lum, lum, 1);// 融合ColorMatrix imageMatrix = new ColorMatrix();imageMatrix.postConcat(lumMatrix);imageMatrix.postConcat(saturationMatrix);imageMatrix.postConcat(hueMatrix);// 给paint设置颜色属性paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix));// 绘制canvas.drawBitmap(bitmap, 0, 0, paint);return temp;}}}

在onCreate方法里刚开始会调用一个scaleImage的方法,该方法可以出门左转参见如何适配APP引导页的文章,有详细介绍。

地址:http://blog.csdn.net/sahadev_/article/details/48475217

没想到安卓提供的图片处理效果这么强大,也了解到原来图片处理是通过矩阵来算的,其它知识请自行查阅。


快试一下效果吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团配送数据治理实践

大数据时代的到来&#xff0c;让越来越多的企业看到了数据资产的价值。将数据视为企业的重要资产&#xff0c;已经成为业界的一种共识&#xff0c;企业也在快速探索应用场景和商业模式&#xff0c;并开始建设技术平台。 但这里要特别强调一下&#xff0c;如果在大数据“拼图”中…

这可能是你近 2 年发论文最好机会!

几年前如果熟练使用TensorFlow&#xff0c;同时掌握基本的AI算法就可以很容易找到一份高薪的工作&#xff0c;但现在不一样了&#xff0c;AI岗位的要求越来越高&#xff0c;对知识的深度也提出了更高的要求。如果现在一个面试官让你从零推导SVM的Dual、从零实现CRF、推导LDA、设…

LeetCode 671. 二叉树中第二小的节点

文章目录1. 题目信息2. 解题2.1 递归查找2.2 改循环1. 题目信息 给定一个非空特殊的二叉树&#xff0c;每个节点都是正数&#xff0c;并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话&#xff0c;那么这个节点的值不大于它的子节点的值。 给出这样的一…

论文浅尝 | 多标签分类中的元学习

论文笔记整理&#xff1a;叶群&#xff0c;浙江大学计算机学院&#xff0c;知识图谱、NLP方向。会议&#xff1a;EMNLP 2019链接&#xff1a;https://arxiv.org/abs/1909.04176Abstract这篇论文首次在多标签分类问题中提出了 meta-learning 的方法&#xff0c;学习weight polic…

从源码角度分析Android系统的异常捕获机制是如何运行的

我们在开发的时候经常会遇到各种异常&#xff0c;当程序遇到异常&#xff0c;便会将异常信息抛到LogCat中&#xff0c;那这个过程是怎么实现的呢&#xff1f; 我们以一个例子开始&#xff1a; import android.app.Activity; import android.os.Bundle;public class MainActivit…

法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准

法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准https://zhuanlan.zhihu.com/p/82878902 执笔人&#xff1a;张宗保律师&#xff08;联系方式&#xff1a;知乎私信&#xff09;执业地域&#xff1a;深圳市执业方向&#xff1a;民商事诉讼一、赔偿标准的适用前提只有在旅游者和旅…

美团技术十年:让我们感动的那些人那些事

时光荏苒&#xff0c;美团十岁了&#xff0c;美团技术团队也走过了十个春秋。 2010年3月4日美团网上线的时候&#xff0c;整个公司总共十来人&#xff0c;在一套三居室的民房里起步。其中技术团队只有5个人&#xff0c;现在有4位还在美团。 今天&#xff0c;美团是中国市值第三…

LeetCode 113. 路径总和 II(回溯)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个二叉树和一个目标和&#xff0c;找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c;5/ \4 8/ / \11 1…

开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具

本文转载自公众号&#xff1a;浙大 KG。作者&#xff1a;余海阳机构&#xff1a;浙江大学代码地址: https://github.com/zjunlp/deepkeOpenKG 发布地址: http://openkg.cn/tool/deepke一、系统简介关系抽取是知识图谱构建的基本子任务之一&#xff0c;它主要面向非结构化的文本…

微前端在美团外卖的实践

背景 微前端是一种利用微件拆分来达到工程拆分治理的方案&#xff0c;可以解决工程膨胀、开发维护困难等问题。随着前端业务场景越来越复杂&#xff0c;微前端这个概念最近被提起得越来越多&#xff0c;业界也有很多团队开始探索实践并在业务中进行了落地。可以看到&#xff0c…

论文浅尝 | Meta Relational Learning: 基于元关系学习的少样本知识图谱推理

本文转载自公众号&#xff1a;浙大KG。 笔记整理&#xff1a;陈名杨&#xff0c;浙江大学在读博士发表会议&#xff1a;EMNLP-2019论文链接&#xff1a;https://arxiv.org/abs/1909.01515开源代码&…

测试集没标签,可以拿来测模型吗?

文&#xff1a;维建编&#xff1a;白鹡鸰背景正常情况下&#xff0c;我们可以用一个带标签的数据集来测试分类器的表现&#xff08;称之为测试集&#xff09;。然而&#xff0c;现实中&#xff0c;因为种种因素的制约&#xff08;标注成本高、标注难度大等 Google&#xff1a;穷…

从0到1 | 手把手教你如何使用哈工大NLP工具——PyLTP!

原文链接&#xff1a;https://flashgene.com/archives/46041.html 本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢. 作者 | 杨秀璋 来源 | CSDN 博客&#xff08;CSDN id&#xff1a;Eastmount&#xff09; 【导语】此文是作者基于 Python 构…

美团智能配送系统的运筹优化实战

深入各个产业已经成为互联网目前的主攻方向&#xff0c;线上和线下存在大量复杂的业务约束和多种多样的决策变量&#xff0c;为运筹优化技术提供了用武之地。作为美团智能配送系统最核心的技术之一&#xff0c;运筹优化是如何在美团各种业务场景中进行落地的呢&#xff1f;本文…

Android如何给无法更改继承关系的Activity更换ActionBar(setContentView方法实战)

前言&#xff1a; 通常我们有时候会直接使用ADT工具直接新建一个Activity页&#xff0c;而这个Activity我们又无法更改它的父类&#xff0c;那遇到这种情况该如何处理呢&#xff1f;其实很简单&#xff0c;好&#xff0c;看如何来解决这个问题&#xff1a; 先来看看这个问题出…

论文浅尝 | 基于属性embeddings的跨图谱实体对齐

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;AAAI 2019链接&#xff1a;https://aaai.org/ojs/index.php/AAAI/article/view/3798跨图谱实体对齐任务的目标是从两个不同知识图谱中找出同一 real-world 实体&a…

LeetCode 771. 宝石与石头(哈希)

文章目录1. 题目信息2. 解题1. 题目信息 给定字符串J 代表石头中宝石的类型&#xff0c;和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型&#xff0c;你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复&#xff0c;J 和 S中的所有字符都是字母…

开启NLP新时代的BERT模型,真的好上手吗?

都说BERT模型开启了NLP的新时代&#xff0c;更有“BERT在手&#xff0c;天下我有”的传说&#xff0c;它解决了很多NLP的难题&#xff1a;1、BERT让低成本地训练超大规模语料成为可能&#xff1b;2、BERT能够联合神经网络所有层中的上下文来进行训练&#xff0c;实现更精准的文…

YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介

原文链接&#xff1a; https://zhuanlan.zhihu.com/p/136382095 YOLO系列&#xff1a;YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介YOLO系列是基于深度学习的回归方法。RCNN&#xff0c; Fast-RCNN&#xff0c;Faster-RCNN是基于深度学习的分类方法。YOLO官网&#xff1a;https://g…

一站式机器学习平台建设实践

本文根据美团配送资深技术专家郑艳伟在2019 SACC&#xff08;中国系统架构师大会&#xff09;上的演讲内容整理而成&#xff0c;主要介绍了美团配送技术团队在建设一站式机器学习平台过程中的经验总结和探索&#xff0c;希望对从事此领域的同学有所帮助。 0. 写在前面 AI是目前…