- package?com.lp.imageUI;??
- ??
- 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);??
- ????????/**?
- ?????????*?画一个圆角矩形?
- ?????????*?rectF:?矩形?
- ?????????*?roundPx?圆角在x轴上或y轴上的半径?
- ?????????*/??
- ????????canvas.drawRoundRect(rectF,?roundPx,?roundPx+10,?paint);??
- ????????//设置两张图片相交时的模式??
- ????????//setXfermode前的是?dst?之后的是src??
- ????????//在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。???
- ????????//如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;??
- ????????//PorterDuffXfermode就可以来解决这个问题??
- ????????//canvas原有的图片?可以理解为背景?就是dst??
- ????????//新画上去的图片?可以理解为前景?就是src??
- //??????paint.setXfermode(new?PorterDuffXfermode(Mode.SRC_OUT));??
- ????????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();??
- ????????//?图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转??
- ????????matrix.preScale(1,?-1);??
- ????????//?创建反转后的图片Bitmap对象,图片高是原图的一半。????
- ????????Bitmap?reflectionImage?=?Bitmap.createBitmap(bitmap,???
- ????????????????0,?height/2,?width,?height/2,?matrix,?false);??
- ????????//?创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。?可以理解为这张图将会在屏幕上显示?是原图和倒影的合体????
- ????????Bitmap?bitmapWithReflection?=?Bitmap.createBitmap(width,?(height?+?height/2),?Config.ARGB_8888);??
- ?????????//?构造函数传入Bitmap对象,为了在图片上画图????
- ????????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;??
- ????}??
- ??????
- }??
详细解决方案
Android平台上兑现图片的缩放,圆角,倒影效果
热度:307 发布时间:2016-05-01 20:18:25.0
相关解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java)中的java.net能不能和c#的system.net.sockets进行tcp通信,该如何解决
- android ListView 中的onItemClick Intent 没法跳转
- android(java) 中文乱码的有关问题
- c#c++,android,ios(iphone),php,java视屏课程 散分
- android Post文件到ASP.NET的有关问题,能收到参数收不到文件
- RIM 替 Android 开发者提供免费的 PlayBook!2月13日前
- android 动态设立控件高度
- Android test project 编译方法
- android -相机使用教程(1)解决方法