ImageView倒影效果的两种方法
来源:互联网 发布:淘宝大学直通车教程 编辑:程序博客网 时间:2024/05/16 17:38
http://lws0402.iteye.com/blog/1397793
第一种:
写个图片的工具类,在Activity中用java代码调用ImageView组件的setImageBitmap(Bitmap bitmap)方法。
下面是图片工具类:
import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.PorterDuff.Mode;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Shader.TileMode;import android.graphics.drawable.Drawable;public class ImageUtils {/** * 从SDCard上读取图片 * @param pathName * @return */public static Bitmap getBitmapFromSDCard(String pathName) {return BitmapFactory.decodeFile(pathName);}/** * 缩放图片 * @param bitmap * @param width * @param height * @return */public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {int w = bitmap.getWidth();int h = bitmap.getHeight();Matrix matrix = new Matrix();matrix.postScale((float) width / w, (float) height / h);return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);}/** * 将Drawable转化为Bitmap * @param drawable * @return */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;}/** * 获得圆角图片 * @param bitmap * @param roundPx * @return */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 Paint paint = new Paint();final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());final RectF rectF = new RectF(rect);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));canvas.drawBitmap(bitmap, rect, rect, paint);return output;}/** * 获得带倒影的图片 * @param bitmap * @return */public static Bitmap getReflectionImageWithOrigin(Bitmap bitmap) {// 原始图片和反射图片中间的间距final int reflectionGap = 0;int width = bitmap.getWidth();int height = bitmap.getHeight();// 反转 Matrix matrix = new Matrix();// 第一个参数为1表示x方向上以原比例为准保持不变,正数表示方向不变。 // 第二个参数为-1表示y方向上以原比例为准保持不变,负数表示方向取反。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 defaultPaint = new Paint();canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);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);paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()+ reflectionGap, paint);return bitmapWithReflection;}}
在Activity中这样调用,先获取XML文件中定义的Imageview对象
- image = (ImageView) findViewById(R.id.movie);
然后将获取到的Imageview对象转化为Bitmap类型
- Bitmap imageBit = ((BitmapDrawable) image.getDrawable()).getBitmap();
接着调用图片工具类中的方法,返回一个Bitmap对象,将这个Bitmap对象放置在ImageView中
- Bitmap m = ImageUtils.getReflectionImageWithOrigin(imageBit);
- image.setImageBitmap(m);
继承ImageView类
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.graphics.Bitmap.Config;import android.graphics.PorterDuff.Mode;import android.graphics.Shader.TileMode;import android.graphics.drawable.BitmapDrawable;import android.util.AttributeSet;import android.widget.ImageView;public class ReflectImageView extends ImageView {private Bitmap originalBitmap;public ReflectImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public ReflectImageView(Context context) {this(context, null, 0);}public ReflectImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);DoReflection(((BitmapDrawable) getDrawable()).getBitmap());}@Overridepublic void setImageBitmap(Bitmap bm) {DoReflection(bm);}/** 显示倒影效果的setImageBitmap函数 */public void setImageBitmap(Bitmap bm, boolean isFlected) {if (isFlected) {super.setImageBitmap(bm);}}@Overridepublic void setImageResource(int resId) {originalBitmap = BitmapFactory.decodeResource(getResources(), resId);DoReflection(originalBitmap);}private void DoReflection(Bitmap bitmap) {final int reflectionGap = 0;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 bitmap4Reflection = Bitmap.createBitmap(width,(height + height / 2), Config.ARGB_8888);Canvas canvasRef = new Canvas(bitmap4Reflection);Paint deafaultPaint = new Paint();deafaultPaint.setAntiAlias(true);canvasRef.drawBitmap(bitmap, 0, 0, null);canvasRef.drawRect(0, height, width, height + reflectionGap,deafaultPaint);canvasRef.drawBitmap(reflectionImage, 0, height + reflectionGap, null);Paint paint = new Paint();LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,bitmap4Reflection.getHeight() + reflectionGap, 0x70ffffff,0x00ffffff, TileMode.CLAMP);paint.setShader(shader);paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));canvasRef.drawRect(0, height, width, bitmap4Reflection.getHeight()+ reflectionGap, paint);this.setImageBitmap(bitmap4Reflection, true);}}
然后在xml文件里面配置
<com.hello.ReflectImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@+drawable/button1" />
- ImageView倒影效果的两种方法
- ImageView的倒影效果
- Photoshop制作倒影的两种方法
- android 实现圆角imageView的两种方法
- 创建imageview的两种方法及区别
- 自定义圆形ImageView控件的两种方法
- android自定义带倒影的ImageView控件
- [Android]倒影效果的ImagView
- 倒影(reflections)效果的实现
- 倒影(reflections)效果的实现
- 实现TextView的倒影效果
- Flex 添加效果的两种方法
- iOS图片倒影效果的2种实现
- iOS图片倒影效果的2种实现
- android imageview倒影
- ImageView设置边框的两种方式
- 倒影效果的图片Bitmap的函数
- CSS-实现的倒影的效果
- 学习笔录之MongoDB小记
- Android中AsyncTask的简单用法
- 如何才能实现在点击链接时直接在网页中打开word文档,但不提示保存
- 测试转开发,一个女孩子短短的工作心得 .
- 软件开发人员的“七重苦”(一)
- ImageView倒影效果的两种方法
- 软件开发人员的“七重苦”(2) .
- C/C++语言不常用的几个关键字
- 在IT业从业这5年总结(第一次写总结)伤不起 .
- 第一记 Bochs在vm中Ubuntu10.10中的搭建
- 研究网页栅格系统
- CKEDITOR使用与配置
- For循环
- ForTest