androidBitmap圆角与倒影实现
2012-11-27 14:25:17 来源:WEB开发网核心提示:/** * 画一个圆角图 * * @param bitmap * @param roundPx * @return */public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {Bitmap output = Bitmap.c
/** * 画一个圆角图 * * @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; }
Tags:androidBitmap 圆角 倒影
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接