二话不说,先上效果图:

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

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

贴布局文件:

<?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

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

快试一下效果吧!

Android实现炫酷的星空变幻效果相关推荐

  1. android 炫酷的自定义轮播图,Android实现炫酷轮播图效果

    轮播图的实现有很多种方式,早先我在网上看了下别人写的轮播图,感觉都比较的墨守成规,有的还有可能加载不了网络图片.所以我在这里自己重新写了下轮播图 ,方便日后的项目使用. 在下面的代码中,我也用voll ...

  2. Android studio实现底部导航,Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果...

    BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退. ...

  3. android svg动画框架,Android实现炫酷SVG动画效果

    svg是目前十分流行的图像文件格式了,svg严格来说应该是一种开放标准的矢量图形语言,使用svg格式我们可以直接用代码来描绘图像,可以用任何文字处理工具打开svg图像,通过改变部分代码来使图像具有交互 ...

  4. android自定义Drawable实现炫酷UI-锦鲤游泳效果

    一.实现效果: 当点击屏幕的时候,屏幕中的锦鲤会身体摆动并且游到屏幕点击处,如下图: 效果分析: 1.小鱼的身体各个部件都是简单的半透明几何图形. 2.各个部件都可以活动. 3.从头到尾方向的部件摆动 ...

  5. php星空背景动态,纯CSS3炫酷3D星空动画特效

    简要教程 这是一款使用纯CSS3制作的炫酷3D星空动画特效.该特效中,以飞船向前快速移动为视角,所有的星星都快速的变大并向后移动,效果非常逼真. 使用方法 HTML结构 该3D星空特效只使用一个 元素 ...

  6. 纯CSS3炫酷3D星空动画特效

    效果: 源码: <!DOCTYPE html> <html lang="zh"> <head><meta charset="UT ...

  7. android 扇形切换,Android 一个炫酷的扇形菜单

    效果演示 效果展示 如何使用 1.布局 android:id="@+id/sector_menu" android:layout_width="wrap_content& ...

  8. js检测鼠标是否在操作_原生JS趣味demo:炫酷头像鼠标追随效果的实现

    我们常在一些网页中 可以看到鼠标追随效果 一个简单的图片.动画 甚至一小段文字 都可以作为鼠标跟随的载体 之前咱们的直播课中 老师也讲过相关的canvas追随粒子特效 今天 就让我们一起来用原生js ...

  9. 西门子界面官方精美触摸屏+WINCC程序模板 西门子官方触摸屏程序模板,炫酷的扁平式动画效果,脚本动画,自动生成二维码,可仿真,堪比智能手机,有精简,精致,wincc,无线面板等包含了所有西门子人机界

    西门子界面官方精美触摸屏+WINCC程序模板 西门子官方触摸屏程序模板,炫酷的扁平式动画效果,脚本动画,自动生成二维码,可仿真,堪比智能手机,有精简,精致,wincc,无线面板等包含了所有西门子人机界 ...

最新文章

  1. ICLR 2022论文列表公布,接收率高达32%
  2. 达梦数据库中服务器日志的开关
  3. uni-app接口封装
  4. 论文笔记:PointNet
  5. jsp oracle 登录页面,Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能
  6. php curl和file get,PHP cURL与file_get_contents
  7. [.Net 4.0]泛型的协变,以及高阶函数对泛型的影响 Part 1
  8. Kafka内核理解:消息的收集/消费机制
  9. mysql 存储ts数据_理解性记忆MySQL数据库
  10. LeetCode 34. Search for a Range
  11. Android反编译实战-去广告
  12. shell脚本读写文本文件
  13. 虚拟机桌面切换命令行
  14. CSS/HTML 网页添加网易云歌曲插件
  15. 2022-08-26 JQuery(二)
  16. 保留原先小程序名称 更改微信小程序主体
  17. mysql 更新的进度_如何查看mysql执行进度
  18. NLP(自然语言处理)
  19. java里面的环链怎么做_Java模式开发之责任链模式
  20. 《自然语言处理》的相关资源

热门文章

  1. 扎克伯格“气哭”了:Meta搞元宇宙巨亏,股价暴跌市值蒸发2000多亿美元
  2. CS224W图机器学习课,斯坦福大牛主讲 | 视频、课件
  3. 马斯克的火箭,这次没!爆!炸!
  4. 56岁潘石屹下定决心学Python,60多岁程序语言之父们还在敲代码,你还敢懈怠吗?...
  5. 免费机器学习课程爆红:从概率与统计到全栈深度学习,英伟达工程师小姐姐整理...
  6. bcftools合并vcf文件
  7. Python初探---2x版本与3x版本的区别
  8. AOS V1.0 发布,JavaEE 应用基础平台
  9. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制
  10. nginx的反向代理及负载均衡