Android平台上实现图片的缩放,圆角,倒影效果
16lz
2021-01-23
主要包含了 放大缩小 圆角图片 和 倒影
- packagecom.lp.imageUI;
- importandroid.graphics.Bitmap;
- importandroid.graphics.Canvas;
- importandroid.graphics.LinearGradient;
- importandroid.graphics.Matrix;
- importandroid.graphics.Paint;
- importandroid.graphics.PixelFormat;
- importandroid.graphics.PorterDuffXfermode;
- importandroid.graphics.Rect;
- importandroid.graphics.RectF;
- importandroid.graphics.Bitmap.Config;
- importandroid.graphics.PorterDuff.Mode;
- importandroid.graphics.Shader.TileMode;
- importandroid.graphics.drawable.Drawable;
- publicclassImageUtil{
- //放大缩小图片
- publicstaticBitmapzoomBitmap(Bitmapbitmap,intw,inth){
- intwidth=bitmap.getWidth();
- intheight=bitmap.getHeight();
- Matrixmatrix=newMatrix();
- floatscaleWidht=((float)w/width);
- floatscaleHeight=((float)h/height);
- matrix.postScale(scaleWidht,scaleHeight);
- Bitmapnewbmp=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
- returnnewbmp;
- }
- //将Drawable转化为Bitmap
- publicstaticBitmapdrawableToBitmap(Drawabledrawable){
- intwidth=drawable.getIntrinsicWidth();
- intheight=drawable.getIntrinsicHeight();
- Bitmapbitmap=Bitmap.createBitmap(width,height,
- drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
- :Bitmap.Config.RGB_565);
- Canvascanvas=newCanvas(bitmap);
- drawable.setBounds(0,0,width,height);
- drawable.draw(canvas);
- returnbitmap;
- }
- //获得圆角图片的方法
- publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
- Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),bitmap
- .getHeight(),Config.ARGB_8888);
- Canvascanvas=newCanvas(output);
- finalintcolor=0xff424242;
- finalPaintpaint=newPaint();
- finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
- finalRectFrectF=newRectF(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(newPorterDuffXfermode(Mode.SRC_OUT));
- paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
- canvas.drawBitmap(bitmap,rect,rect,paint);
- returnoutput;
- }
- //获得带倒影的图片方法
- publicstaticBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
- //图片与倒影间隔距离
- finalintreflectionGap=4;
- //图片的宽度
- intwidth=bitmap.getWidth();
- //图片的高度
- intheight=bitmap.getHeight();
- Matrixmatrix=newMatrix();
- //图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转
- matrix.preScale(1,-1);
- //创建反转后的图片Bitmap对象,图片高是原图的一半。
- BitmapreflectionImage=Bitmap.createBitmap(bitmap,
- 0,height/2,width,height/2,matrix,false);
- //创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。可以理解为这张图将会在屏幕上显示是原图和倒影的合体
- BitmapbitmapWithReflection=Bitmap.createBitmap(width,(height+height/2),Config.ARGB_8888);
- //构造函数传入Bitmap对象,为了在图片上画图
- Canvascanvas=newCanvas(bitmapWithReflection);
- //画原始图片
- canvas.drawBitmap(bitmap,0,0,null);
- //画间隔矩形
- PaintdeafalutPaint=newPaint();
- canvas.drawRect(0,height,width,height+reflectionGap,
- deafalutPaint);
- //画倒影图片
- canvas.drawBitmap(reflectionImage,0,height+reflectionGap,null);
- //实现倒影渐变效果
- Paintpaint=newPaint();
- LinearGradientshader=newLinearGradient(0,
- bitmap.getHeight(),0,bitmapWithReflection.getHeight()
- +reflectionGap,0x70ffffff,0x00ffffff,TileMode.CLAMP);
- paint.setShader(shader);
- //SettheTransfermodetobeporterduffanddestinationin
- //覆盖效果
- paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
- //Drawarectangleusingthepaintwithourlineargradient
- canvas.drawRect(0,height,width,bitmapWithReflection.getHeight()
- +reflectionGap,paint);
- returnbitmapWithReflection;
- }
- }
圆角和倒影的效果如图:
<!--EndFragment-->
更多相关文章
- android读取图片
- Android 使用Glide实现圆形和圆角图片
- 2012-7-20 android 图片叠加效果——两种方法
- Android文件图片上传的详细讲解(四)---服务端编码
- android处理大图片内存溢出的简单办法
- android:ImageView选择本地图片并显示
- android获取图片和视频的缩略图