本文源自:http://blog.csdn.net/kenshintang1215/article/details/5804236


效果图如下:


转:[Android]倒影效果的ImagView

代码如下:

package lab.sodino.reflection;    import android.content.Context;  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.PorterDuff.Mode;  import android.graphics.PorterDuffXfermode;  import android.graphics.Shader.TileMode;  import android.graphics.drawable.BitmapDrawable;  import android.util.AttributeSet;  import android.widget.ImageView;    public class ReflectionImage extends ImageView {      // 是否为Reflection模式      private boolean mReflectionMode = true;        public ReflectionImage(Context context) {          super(context);      }        public ReflectionImage(Context context, AttributeSet attrs) {          super(context, attrs);          measure(0, 0);          // 取得原始图片的bitmap并重画          Bitmap originalImage = ((BitmapDrawable) this.getDrawable()).getBitmap();          DoReflection(originalImage);      }        public ReflectionImage(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);          Bitmap originalImage = ((BitmapDrawable) this.getDrawable()).getBitmap();          DoReflection(originalImage);      }        public void setReflectionMode(boolean isRef) {          mReflectionMode = isRef;      }        public boolean getReflectionMode() {          return mReflectionMode;      }        // 偷懒了,只重写了setImageResource,和构造函数里面干了同样的事情      @Override      public void setImageResource(int resId) {          Bitmap originalImage = BitmapFactory.decodeResource(getResources(), resId);          DoReflection(originalImage);          // super.setImageResource(resId);      }        private void DoReflection(Bitmap originalImage) {          // 原始图片和反射图片中间的间距          final int reflectionGap = 4;          int width = originalImage.getWidth();          int height = originalImage.getHeight();          // 反转          Matrix matrix = new Matrix();          // 第一个参数为1表示x方向上以原比例为准保持不变,正数表示方向不变。          // 第二个参数为-1表示y方向上以原比例为准保持不变,负数表示方向取反。          matrix.preScale(1, -0.75f);          // reflectionImage就是下面透明的那部分,可以设置它的高度为原始的3/4,这样效果会更好些          Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, 0, width, height * 3 / 4, matrix, false);          // 创建一个新的bitmap,高度为原来的两倍          Bitmap bitmap4Reflection = Bitmap.createBitmap(width, (height + height * 3 / 4), Config.ARGB_8888);          // 其宽*高 = width * (height + height * 3 / 4)          Canvas canvasRef = new Canvas(bitmap4Reflection);          // 先画原始的图片          canvasRef.drawBitmap(originalImage, 0, 0, null);          // 画间距          Paint deafaultPaint = new Paint();          // defaultPaint不能为null,否则会有空指针异常。          canvasRef.drawRect(0, height, width, height + reflectionGap, deafaultPaint);          // 画被反转以后的图片          canvasRef.drawBitmap(reflectionImage, 0, height + reflectionGap, null);          // 创建一个渐变的蒙版放在下面被反转的图片上面          Paint paint = new Paint();          LinearGradient shader = new LinearGradient(200, originalImage.getHeight(), 10, bitmap4Reflection.getHeight()                  + reflectionGap, 0x80ffffff, 0x00ffffff, TileMode.CLAMP);          paint.setShader(shader);          // Set the Transfer mode to be porter duff and destination in          paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));          // 将蒙板画上          canvasRef.drawRect(0, height, width, bitmap4Reflection.getHeight() + reflectionGap, paint);          // 调用ImageView中的setImageBitmap          this.setImageBitmap(bitmap4Reflection);      }  }  

转自:http://blog.csdn.net/sodino/article/details/6797177

更多相关文章

  1. 直播源码用Glide框架缓存压缩图片做一个网络图片查看器
  2. Android图片解决方案
  3. Android 圆角图片 圆形图片
  4. android 调用相册里的图片并返回
  5. Android 图片透明度处理代码
  6. Android读取服务器图片
  7. android application级别的图片缓存

随机推荐

  1. Android(安卓)蓝牙对战五子棋项目实现(含
  2. Android中使用Notification并通过点击Not
  3. Android最佳性能实践(1):合理管理内存
  4. Android(安卓)OpenCV(十一):图像仿射变换
  5. Android实现社交应用中的评论和回复功能
  6. 我的工作感悟:作为Android(安卓)开发者,该
  7. Android(安卓)IO性能分析及排查
  8. Android应用进程防杀指南2-双进程守护
  9. Android与物联网设备通信-网络模型分层
  10. Android(安卓)中View的绘制流程(结合图解