Android中建立倒影效果的工具類

來源:互聯網
上載者:User

標籤:android   style   blog   class   code   c   

          

      一、有時候我們需要建立倒影的效果,我們接觸最多的都是圖片能夠建立倒影,而布局依然可以建立倒影。

      二、工具類代碼

import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff.Mode;import android.graphics.PorterDuffXfermode;import android.graphics.Shader.TileMode;import android.view.View;/** * 建立圖片倒影的方法 *  * @author  * */public class ImageReflect {    private static int reflectImageHeight = 90;//倒影的高度    //轉化為bitmap    public static Bitmap convertViewToBitmap(View paramView) {        paramView.measure(View.MeasureSpec.makeMeasureSpec(0, 0), View.MeasureSpec.makeMeasureSpec(0, 0));        paramView.layout(0, 0, paramView.getMeasuredWidth(), paramView.getMeasuredHeight());        paramView.buildDrawingCache();        return paramView.getDrawingCache();    }    public static Bitmap createCutReflectedImage(Bitmap paramBitmap, int paramInt) {        int i = paramBitmap.getWidth();        int j = paramBitmap.getHeight();        Bitmap localBitmap2 = null;        if (j <= paramInt + reflectImageHeight) {            localBitmap2 = null;        } else {            Matrix localMatrix = new Matrix();            localMatrix.preScale(1.0F, -1.0F);            // System.out.println(j - reflectImageHeight -            // paramInt);            Bitmap localBitmap1 = Bitmap.createBitmap(paramBitmap, 0, j - reflectImageHeight - paramInt, i, reflectImageHeight, localMatrix, true);            localBitmap2 = Bitmap.createBitmap(i, reflectImageHeight, Bitmap.Config.ARGB_8888);            Canvas localCanvas = new Canvas(localBitmap2);            localCanvas.drawBitmap(localBitmap1, 0.0F, 0.0F, null);            LinearGradient localLinearGradient = new LinearGradient(0.0F, 0.0F, 0.0F, localBitmap2.getHeight(), -2130706433, 16777215, TileMode.CLAMP);            Paint localPaint = new Paint();            localPaint.setShader(localLinearGradient);            localPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));            localCanvas.drawRect(0.0F, 0.0F, i, localBitmap2.getHeight(), localPaint);            if (!localBitmap1.isRecycled())                localBitmap1.recycle();            System.gc();        }        return localBitmap2;    }    public static Bitmap createReflectedImage(Bitmap paramBitmap, int paramInt) {        int i = paramBitmap.getWidth();        int j = paramBitmap.getHeight();        Bitmap localBitmap2;        if (j <= paramInt) {            localBitmap2 = null;        } else {            Matrix localMatrix = new Matrix();            localMatrix.preScale(1.0F, -1.0F);            Bitmap localBitmap1 = Bitmap.createBitmap(paramBitmap, 0, j - paramInt, i, paramInt, localMatrix, true);            localBitmap2 = Bitmap.createBitmap(i, paramInt, Bitmap.Config.ARGB_8888);            Canvas localCanvas = new Canvas(localBitmap2);            localCanvas.drawBitmap(localBitmap1, 0.0F, 0.0F, null);            LinearGradient localLinearGradient = new LinearGradient(0.0F, 0.0F, 0.0F, localBitmap2.getHeight(), -2130706433, 16777215, TileMode.CLAMP);            Paint localPaint = new Paint();            localPaint.setShader(localLinearGradient);            localPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));            localCanvas.drawRect(0.0F, 0.0F, i, localBitmap2.getHeight(), localPaint);        }        return localBitmap2;    }        public static Bitmap createReflectedImage(Bitmap originalImage) {        final int reflectionGap = 4;        int width = originalImage.getWidth();        int height = originalImage.getHeight();        Matrix matrix = new Matrix();        matrix.preScale(1, -1);        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(originalImage, 0, 0, null);        Paint defaultPaint = new Paint();        canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);        canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);        Paint paint = new Paint();        LinearGradient shader = new LinearGradient(0,                originalImage.getHeight(), 0, bitmapWithReflection.getHeight()                        + reflectionGap, 0x70ffffff, 0x00ffffff,                TileMode.MIRROR);        paint.setShader(shader);        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));        canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()                + reflectionGap, paint);        return bitmapWithReflection;    }}

  三、這裡面有很多種方法,可以自己根據需求去選擇。

      調用樣本:

      ps:我這是建立多個倒影,所以用了一個for迴圈。迴圈操作的是兩個圖片數組。

for (int k = 0; k < REFLECT_COUNT; k++) {            arrayOfImageView[k].setImageBitmap(ImageReflect.createCutReflectedImage(ImageReflect.convertViewToBitmap(imagereflect[k]), 0));        }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.