/** * 畫一個圓角圖 * * @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; }