源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

android Bitmap圆角与倒影的具体实现代码

  • 时间:2020-10-17 00:58 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:android Bitmap圆角与倒影的具体实现代码
[html]
[u]复制代码[/u] 代码如下:
/**      * 画一个圆角图      *       * @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 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);         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));         canvas.drawBitmap(bitmap, rect, rect, paint);         return output;     }     /**      * 创建倒影效果      *       * @return      */     public boolean createReflectedImages() {         // 倒影图和原图之间的距离         final int reflectionGap = 4;         int index = 0;         for (GalleryWith3DData imageId : mImageIds) {             // 返回原图解码之后的bitmap对象             Bitmap originalImage = BitmapFactory.decodeResource(                     mContext.getResources(), imageId.getInteger());             int width = originalImage.getWidth();             int height = originalImage.getHeight();             // 创建矩阵对象             Matrix matrix = new Matrix();             // 指定矩阵(x轴不变,y轴相反)             matrix.preScale(1, -1);             // 将矩阵应用到该原图之中,返回一个宽度不变,高度为原图1/2的倒影位图             Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 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(getRoundedCornerBitmap(originalImage, 20), 0, 0,                     null);             int len = imageId.getstr().length();             double lenWeght = len * 50 * 0.9;             int ban = width / 2;             int ban1 = (int) (lenWeght / 2);             int hua = ban - ban1;             if (imageId.getFlagRecommend()) {                 canvas.rotate(30);                 canvas.drawText(mStrRecommend, hua - 20, 150,                         createPaint(Color.RED));                 canvas.rotate(-30);             }             Paint deafaultPaint = new Paint();             deafaultPaint.setAntiAlias(false);             canvas.drawBitmap(getRoundedCornerBitmap(reflectionImage, 20), 0,                     height + reflectionGap, null);             Paint paint = new Paint();             paint.setAntiAlias(false);             /**              * 参数一:为渐变起初点坐标x位置, 参数二:为y轴位置, 参数三和四:分辨对应渐变终点, 最后参数为平铺方式,              * 这里设置为镜像Gradient是基于Shader类,所以我们通过Paint的setShader方法来设置这个渐变              */             LinearGradient shader = new LinearGradient(0,                     originalImage.getHeight(), 0,                     bitmapWithReflection.getHeight() + reflectionGap,                     0x70ffffff, 0x00ffffff, TileMode.MIRROR);             // 设置阴影             paint.setShader(shader);             paint.setXfermode(new PorterDuffXfermode(                     android.graphics.PorterDuff.Mode.DST_IN));             // 用已经定义好的画笔构建一个矩形阴影渐变效果             canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);             canvas.drawText(imageId.getstr(), hua, 430,                     createPaint(Color.WHITE));             // 创建一个ImageView用来显示已经画好的bitmapWithReflection             ImageView imageView = new ImageView(mContext);             imageView.setImageBitmap(bitmapWithReflection);             // 设置imageView大小 ,也就是最终显示的图片大小             imageView.setLayoutParams(new GalleryWith3D.LayoutParams(150, 250));             // imageView.setScaleType(ScaleType.MATRIX);             mImages[index++] = imageView;         }         return true;     }
下面是效果图: [img]http://files.jb51.net/file_images/article/201306/2013614103516013.jpg[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部