- 浏览: 403244 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ysn003:
这样用就好啦!!!<Button ...
Android学习 之 ColorStateList按钮文字变色 -
ysn003:
Android学习 之 ColorStateList按钮文字变色 -
vitoliao:
楼主你好,如果你的代码需要实现的是回显功能,需要在MainCl ...
Java学习 之 Socket(实现简易的C/S聊天室) -
xinqiqi123:
在item布局中要是引用到自定的东西,item就会显示不全
Android学习 之 问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案 -
CTXsamCTX:
很好,学习了。
Android 图形用户界面 之 绘图(一)
原文地址:http://www.androidmi.com/Androidkaifa/jinjie/201011/1788.html
作者的联系方式:
QQ:524509159
Email:hoohbood@gmail.com
Tel:18666294230
大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.
废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:
view plaincopy to clipboardprint?
package com.android.tutor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.Drawable;
public class ImageUtil {
//放大缩小图片
public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidht = ((float)w / width);
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidht, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return newbmp;
}
//将Drawable转化为Bitmap
public static Bitmap drawableToBitmap(Drawable drawable){
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height,
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;
}
//获得圆角图片的方法
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
//获得带倒影的图片方法
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){
final int reflectionGap = 4;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
0, height/2, width, height/2, matrix, false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint deafalutPaint = new Paint();
canvas.drawRect(0, height,width,height + reflectionGap,
deafalutPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
bitmap.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// Draw a rectangle using the paint with our linear gradient
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
}
package com.android.tutor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.Drawable;
public class ImageUtil {
//放大缩小图片
public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidht = ((float)w / width);
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidht, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return newbmp;
}
//将Drawable转化为Bitmap
public static Bitmap drawableToBitmap(Drawable drawable){
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height,
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;
}
//获得圆角图片的方法
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
//获得带倒影的图片方法
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){
final int reflectionGap = 4;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
0, height/2, width, height/2, matrix, false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint deafalutPaint = new Paint();
canvas.drawRect(0, height,width,height + reflectionGap,
deafalutPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
bitmap.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// Draw a rectangle using the paint with our linear gradient
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
}
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/image01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
<ImageView
android:id="@+id/image02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/image01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
<ImageView
android:id="@+id/image02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
</LinearLayout>
第四步:修改主核心程序,ImageDemo.java,代码如下:
view plaincopy to clipboardprint?
package com.android.tutor;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
public class Imagedemo extends Activity {
private ImageView mImageView01,mImageView02;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mImageView01 = (ImageView)findViewById(R.id.image01);
mImageView02 = (ImageView)findViewById(R.id.image02);
//获取壁纸返回值是Drawable
Drawable drawable = getWallpaper();
//将Drawable转化为Bitmap
Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);
//缩放图片
Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);
//获取圆角图片
Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);
//获取倒影图片
Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);
//这里可以让Bitmap再转化为Drawable
// Drawable roundDrawable = new BitmapDrawable(roundBitmap);
// Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
// mImageView01.setBackgroundDrawable(roundDrawable);
// mImageView02.setBackgroundDrawable(reflectDrawable);
mImageView01.setImageBitmap(roundBitmap);
mImageView02.setImageBitmap(reflectBitmap);
}
}
package com.android.tutor;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
public class Imagedemo extends Activity {
private ImageView mImageView01,mImageView02;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mImageView01 = (ImageView)findViewById(R.id.image01);
mImageView02 = (ImageView)findViewById(R.id.image02);
//获取壁纸返回值是Drawable
Drawable drawable = getWallpaper();
//将Drawable转化为Bitmap
Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);
//缩放图片
Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);
//获取圆角图片
Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);
//获取倒影图片
Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);
//这里可以让Bitmap再转化为Drawable
// Drawable roundDrawable = new BitmapDrawable(roundBitmap);
// Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
// mImageView01.setBackgroundDrawable(roundDrawable);
// mImageView02.setBackgroundDrawable(reflectDrawable);
mImageView01.setImageBitmap(roundBitmap);
mImageView02.setImageBitmap(reflectBitmap);
}
}
第五步:运行上述工程,查看效果如下:
OK大功告成了!!
发表评论
-
Android 基本控件 之 TabHost(一)个性你的标签视图
2011-05-31 13:41 4310利用我们前几节文章中讲到的关于Java的反射机制(http ... -
《Ophone应用开发权威指南》学习:Android 图形用户界面 之 动画(一)
2011-05-25 17:47 2887直接贴上今天写的一些小Demo代码,供以后学习:2011 - ... -
Android学习 之 Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合成所需对象,如图像
2011-05-17 17:52 10683直接入正题吧... ... 1.创建数据库表的时候选择 ... -
【转】绝对有用,Android系统更改事件之横竖屏切换
2011-05-17 09:51 3469原文地址,转载请注明 ...
相关推荐
首先,我们要理解Android中处理图片的基础:Bitmap对象。Bitmap是Android系统用于表示图像数据的类,它包含了像素信息,可以进行各种图像操作。处理图片特效,通常需要先将图片加载为Bitmap对象。 1. **灰度处理**...
在Android平台上,图像处理是一个非常重要的领域,尤其在开发各种社交、美颜或者摄影类应用时,图像柔化和美白特效是不可或缺的功能。这个压缩包文件"Android 图像柔化美白特效源码.rar"很可能包含了实现这些效果的...
模糊和锐化效果是图像处理的基本操作。模糊通常通过卷积滤波器实现,例如高斯模糊;而锐化则可能通过计算图像的拉普拉斯导数或差分来增强边缘。 黑白效果简单直接,只需将图像转换为灰度即可。Android提供了多种...
在安卓(Android)平台上,开发图像处理应用时,经常会涉及到各种图片特效的实现。这个压缩包"安卓Android源码——常用图片特效处理.rar"显然包含了用于处理图片特效的源代码,可以帮助开发者理解和学习如何在...
柔化特效通常涉及模糊处理,这在Android中可以使用Bitmap的`blur()`方法或renderscript的`BlurMaskFilter`来实现。模糊算法可能包含高斯模糊、均值模糊等,它们通过对图像像素的邻域进行平均来降低图像的细节,从而...
本文将深入探讨如何在Android中实现轴旋转特效,以制作一个别样的图片浏览器。 首先,我们需要理解“中轴旋转”的概念。这是一种3D空间中的变换,物体绕着一个固定的点(即中轴)进行旋转。在Android中,我们可以...
研究这个源码,开发者可以学习如何在Android中实现复杂的图像处理特效,并将其应用到自己的项目中。 总的来说,"Android源码——图像连环画特效源码_new_38.zip"是一个宝贵的教育资源,它涵盖了Android图像处理的...
首先,我们要明白Android中的图像处理涉及到的主要技术领域包括位图操作、色彩空间转换、滤镜应用以及图形渲染等。这些技术通常用于创建如模糊、旋转、裁剪、缩放、色彩调整、滤镜特效等常见功能。 1. **位图操作**...
Bitmap是Android中表示图像的基本对象,它存储图像的像素数据。通过BitmapFactory类,我们可以从资源、文件或流中加载Bitmap。Canvas则用于在Bitmap上进行绘制,包括画线、文字、形状等。Bitmap与Canvas结合,可以...
在Android开发中,手势识别是实现用户交互的关键技术之一,特别是在图像处理方面。"android手势处理图片平移、缩放和旋转"这个主题涉及到的主要知识点包括Android手势检测、ImageView的扩展以及图片操作。 首先,...
《Android100种图片处理效果大全项目》是一款专注于Android平台上的图像处理示例集合,提供了丰富的图片操作功能。这个项目旨在帮助开发者深入理解和实践Android系统中的图像处理技术,包括但不限于滤镜效果、裁剪、...
在Android中,我们可以使用各种方式实现这些特效,包括自定义View、使用第三方库以及Android自带的一些组件。 1. 自定义View:通过继承自Android的View类,开发者可以完全控制视图的绘制过程,从而实现复杂的动画...
这些可以通过OpenCV库在Android中实现,OpenCV提供了丰富的图像处理函数。 另外,优化是不可忽视的一环。由于实时扭曲和变形可能会消耗大量计算资源,尤其是在处理高分辨率图像时,所以需要考虑性能优化。可以采用...
9. **实时滤镜和图像处理**:在图片应用或相机功能中,实时滤镜和图像处理特效是不可或缺的。源码可能涉及到OpenGL ES或renderscript的使用,实现图片的实时美颜、滤镜应用等功能。 10. **加载和空状态提示**:在...
本文是结合博客http://blog.csdn.net/eastmount/article/details/41668583关于android图像增强处理的。通过点击“打开图片”按钮选择本地图像,再通过3SeekBar按钮实现滑动修改图片的饱和度、色相和亮度。 免费资源...
使用OpenGL ES或RenderScript,可以将图像处理任务转移到GPU,提高处理速度,尤其适用于复杂的图像特效。 10. 图片选择器: 开发中,经常需要实现图片选择功能,可以集成像Android-Universal-Image-Loader这样的...
总之,实现Android系统联系人应用的全特效,尤其是字母表快速滚动,需要对Android的ContentProvider、UI设计、事件处理以及性能优化有深入理解。通过学习和实践,你可以创建出一个高效、易用的联系人应用。
在Android中,我们可以使用自定义View或者第三方库来实现这一效果。这里我们以自定义View为例,逐步介绍实现过程。 1. **自定义View的创建**: 创建一个新的Java类,继承自`View`或`ViewGroup`。在这个类中,我们...
该资源是博客http://blog.csdn.net/eastmount/article/details/43605509的android图像处理demo,希望对大家有所帮助.主要通过相册和照相处理图像,采用android 4.4开发. 个人对自己做的效果感觉不错.