ReflectedBitmap(倒影效果)
2015-08-19 20:34
267 查看
为图像添加倒影效果
资源下载:http://download.csdn.net/detail/scimence/9027465
资源下载:http://download.csdn.net/detail/scimence/9027465
package com.sci.reflectedbitmap; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(creatReflectView(R.drawable.pic5)); } // 创建创建带倒影效果的ImageView @SuppressWarnings("deprecation") private View creatReflectView(int resId) { RelativeLayout body = new RelativeLayout(this); // 创建倒影图像 ImageView pic = new ImageView(this); Drawable drawable = BitmapTools.createReflectedDrawable(this, resId); pic.setBackgroundDrawable(drawable); // 居中显示倒影图像 int w = drawable.getIntrinsicWidth(), h = drawable.getIntrinsicHeight(); RelativeLayout.LayoutParams paramsBody = new RelativeLayout.LayoutParams(w, h); paramsBody.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); body.addView(pic, paramsBody); return body; } }
package com.sci.reflectedbitmap; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; 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.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; public class BitmapTools { /** * 为图像srcBitmap, 添加倒影效果 */ public static Bitmap createReflectedBitmap(Bitmap srcBitmap) { if (null == srcBitmap) return null; // 原图和倒影之间的间距 final int GAP = 8; int W1 = srcBitmap.getWidth(), H1 = srcBitmap.getHeight(); int W2 = W1, H2 = H1 / 2; if (W1 == 0 || H1 == 0) return null; try { // 创建图像倒影,倒影为原图的下半部分Y轴翻转 Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionBitmap = Bitmap.createBitmap(srcBitmap, 0, H1 / 2, W1, H1 / 2, matrix, false); if (null == reflectionBitmap) return null; // 创建原图和倒影的合图 Bitmap bitmapWithReflection = Bitmap.createBitmap(W2, H1 + H2 + GAP, Config.ARGB_8888); if (null == bitmapWithReflection) return null; Canvas canvas = new Canvas(bitmapWithReflection); // 从Bitmap创建Canvas canvas.drawBitmap(srcBitmap, 0, 0, null); // 绘制原图 canvas.drawBitmap(reflectionBitmap, 0, H1 + GAP, null); // 绘制倒影 // 为倒影图添加颜色线性渐变 Paint paint = new Paint(); paint.setAntiAlias(true); LinearGradient shader = new LinearGradient(0, H1, 0, bitmapWithReflection.getHeight() + GAP, 0x70FFFFFF, 0x00FFFFFF, TileMode.MIRROR); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN)); // 绘制线性渐变 canvas.drawRect(0, H1, W1, bitmapWithReflection.getHeight() + GAP, paint); return bitmapWithReflection; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从资源Id创建Drawable图像,并为其添加倒影效果 */ public static Bitmap createReflectedBitmap(Context context, int resId) { Drawable drawable = getDrawableById(context, resId);// 创建Drawable图像 Bitmap bitmap = drawableToBitmap(drawable); // 转化为Bitmap return createReflectedBitmap(bitmap); // 创建倒影效果 } /** * 从资源Id创建Drawable图像,并为其添加倒影效果 */ public static Drawable createReflectedDrawable(Context context, int resId) { Bitmap bitmap = createReflectedBitmap(context, resId); // 获取带倒影的Bitmap图像 Drawable drawable = bitmapToDrawable(bitmap); // 转化为Drawable图像 return drawable; } /** * 从资源Id创建Drawable图像 */ public static Drawable getDrawableById(Context context, int resId) { Drawable drawable = context.getResources().getDrawable(resId); return drawable; } /** * 将Drawable转化为Bitmap */ public static Bitmap drawableToBitmap(Drawable drawable) { if (null == drawable) { return null; } int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); return drawableToBitmap(drawable, width, height); } /** * 将Bitmap转化为Drawable */ public static Drawable bitmapToDrawable(Bitmap bitmap) { @SuppressWarnings("deprecation") BitmapDrawable drawable = new BitmapDrawable(bitmap); drawable.setAntiAlias(true); return drawable; } /** * 将Drawable转化为指定大小的Bitmap */ public static Bitmap drawableToBitmap(Drawable drawable, int width, int height) { if (null == drawable || width <= 0 || height <= 0) { return null; } Config config = (drawable.getOpacity() != PixelFormat.OPAQUE) ? Config.ARGB_8888 : Config.RGB_565; Bitmap bitmap = null; try { bitmap = Bitmap.createBitmap(width, height, config); if (null != bitmap) { Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, width, height); drawable.draw(canvas); } } catch (Exception e) { e.printStackTrace(); } return bitmap; } }
相关文章推荐
- Java关键字final、static使用总结
- Hdu oj 2066 一个人的旅行
- div滚动字幕
- Activity的2种启动方式
- OC数组的四大遍历方式和分析。
- 一个ajax的Post要求
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(2)
- 简单且线程安全的两个单例模式java程序
- arraylist的使用
- sql 随机函数newid()
- Android 循环滑动viewpager
- HDU 5339 Untitled 状态压缩 BC round49 A
- UICollectionView在初始化的时候移动到某个距离
- iOS面试题五
- 时间改变一切
- VS编译设置
- C程序存储空间布局(一)——各数据段的内存位置
- 面试题收集
- JS 本地属性与继承属性
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(1)