Android(java)学习笔记240:多媒体之图形颜色的变化
2015-09-13 12:45
453 查看
1.相信大家都用过美图秀秀中如下的功能,调整颜色:
2. 下面通过案例说明Android中如何调色:
颜色矩阵 ColorMatrix cm = new ColorMatrix();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
New Red Value = 1*128 + 0*128 + 0*128 + 0*0 + 0
New Blue Value = 0*128 + 1*128 + 0*128 + 0*0 + 0
New Green Value = 0*128 + 0*128 + 1*128 + 0*0 + 0
New Alpha Value = 0*128 + 0*128 + 0*128 + 1*0 + 0
(1)新建一个新的Android工程,如下:
(2)activity_main.xml,如下:
其中控件SeekBar的属性android:max表示进度条的最大值,android:progress表示进度条的起初开始默认进度值
布局效果如下:
(3)MainActivity,如下:
运行结果如下:
2. 下面通过案例说明Android中如何调色:
颜色矩阵 ColorMatrix cm = new ColorMatrix();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
New Red Value = 1*128 + 0*128 + 0*128 + 0*0 + 0
New Blue Value = 0*128 + 1*128 + 0*128 + 0*0 + 0
New Green Value = 0*128 + 0*128 + 1*128 + 0*0 + 0
New Alpha Value = 0*128 + 0*128 + 0*128 + 1*0 + 0
(1)新建一个新的Android工程,如下:
(2)activity_main.xml,如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.himi.xiuxiu.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="青------------->红" /> <SeekBar android:id="@+id/sb_red" android:max="255" android:progress="128" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="紫------------->绿" /> <SeekBar android:max="255" android:progress="128" android:id="@+id/sb_green" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="黄------------->蓝" /> <SeekBar android:max="255" android:progress="128" android:id="@+id/sb_blue" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv" /> </LinearLayout>
其中控件SeekBar的属性android:max表示进度条的最大值,android:progress表示进度条的起初开始默认进度值
布局效果如下:
(3)MainActivity,如下:
package com.himi.xiuxiu; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.os.Bundle; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; public class MainActivity extends Activity implements OnSeekBarChangeListener { private SeekBar sb_red; private SeekBar sb_green; private SeekBar sb_blue; private ImageView iv; private Bitmap srcbitmap; private Bitmap alertbitmap; private Canvas canvas; private Paint paint; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sb_red = (SeekBar) findViewById(R.id.sb_red); sb_green = (SeekBar) findViewById(R.id.sb_green); sb_blue = (SeekBar) findViewById(R.id.sb_blue); iv = (ImageView) findViewById(R.id.iv); //获得原图的位图 srcbitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre19); //获得原图的拷贝副本 alertbitmap = Bitmap.createBitmap(srcbitmap.getWidth(), srcbitmap.getHeight(), srcbitmap.getConfig()); //创建一个画布 canvas = new Canvas(alertbitmap); //创建画笔 paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.set(new float[] { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }); paint.setColorFilter(new ColorMatrixColorFilter(cm)); canvas.drawBitmap(srcbitmap, new Matrix(), paint); iv.setImageBitmap(alertbitmap); sb_red.setOnSeekBarChangeListener(this); sb_green.setOnSeekBarChangeListener(this); sb_blue.setOnSeekBarChangeListener(this); } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO 自动生成的方法存根 } public void onStartTrackingTouch(SeekBar seekBar) { // TODO 自动生成的方法存根 } // 停止滑动进度条,才设置颜色变化,节省内存 public void onStopTrackingTouch(SeekBar seekBar) { float red=1; float green=1; float blue=1; switch (seekBar.getId()) { case R.id.sb_red: red = seekBar.getProgress()/128.0f; break; case R.id.sb_green: green = seekBar.getProgress()/128.0f; break; case R.id.sb_blue: blue = seekBar.getProgress()/128.0f; break; default: break; } ColorMatrix cm = new ColorMatrix(); cm.set(new float[] { red, 0, 0, 0, 0, 0, green, 0, 0, 0, 0, 0, blue, 0, 0, 0, 0, 0, 1, 0 }); paint.setColorFilter(new ColorMatrixColorFilter(cm)); canvas.drawBitmap(srcbitmap, new Matrix(), paint); iv.setImageBitmap(alertbitmap); } }
运行结果如下:
相关文章推荐
- Android应用的基本组件介绍
- 使用apktool + idea 调试smali
- Android 更新版本 应用程序未安装 解决办法
- android:windowSoftInputMode 属性(输入法软键盘的那点事)
- 【Android自定义View】美观个性的进度条
- Android--通过AIDL+反射,调用android内部隐藏的服务实现挂断电话
- listview android:cacheColorHint,android:listSelector属性作用
- Activity生命周期之屏幕切换与应用的响应性
- Android之编程中存在性能影响的主要方面
- Binder进程间通信机制的Service Manager组件的启动过程
- Android菜鸟的成长笔记——开发环境的搭建
- android EditText 设置密码锁源码
- Android Fragment
- Android4.4的zygote进程(上)
- 关于MPAndroidChart柱状图左右滑动
- Activity
- Shape
- Android(java)学习笔记239:多媒体之撕衣服的案例
- Android下的stl读取3D显示
- android开发xml style使用