Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理

           

          /**
            * This code is courtesy of Neil Davies at http://www.inter-fuser.com
            * @param context the current context
            * @param originalImage The original Bitmap image used to create the reflection
            * @return the bitmap with a reflection
            */
           public static Bitmap createReflectedImage(Context context, Bitmap originalImage) {
                    //The gap we want between the reflection and the original image
                    final int reflectionGap = 4;
                   
                      int width = originalImage.getWidth();
                      int height = originalImage.getHeight();
                      
                
                      //This will not scale but will flip on the Y axis
                      Matrix matrix = new Matrix();
                      matrix.preScale(1, -1);
                      
                      //Create a Bitmap with the flip matrix applied to it.
                      //We only want the bottom half of the image
                      Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height/2, width, height/2, matrix, false);
                      
                          
                      //Create a new bitmap with same width but taller to fit reflection
                      Bitmap bitmapWithReflection = Bitmap.createBitmap(width
                        , (height + height/2), Config.ARGB_8888);
                    
                     //Create a new Canvas with the bitmap that's big enough for
                     //the image plus gap plus reflection
                     Canvas canvas = new Canvas(bitmapWithReflection);
                     //Draw in the original image
                     canvas.drawBitmap(originalImage, 0, 0, null);
                     //Draw in the gap
                     Paint defaultPaint = new Paint();
                     canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);
                     //Draw in the reflection
                     canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null);
                     
                     //Create a shader that is a linear gradient that covers the reflection
                     Paint paint = new Paint();
                     LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0,
                       bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff,
                       TileMode.CLAMP);
                    //Set the paint to use this shader (linear gradient)
                     paint.setShader(shader);
                     //Set the Transfer mode to be porter duff and destination in
                     paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
                     //Draw a rectangle using the paint with our linear gradient
                     canvas.drawRect(0, height, width,
                       bitmapWithReflection.getHeight() + reflectionGap, paint);
                    
                    return bitmapWithReflection;
            }
          posted on 2010-05-07 18:52 calvin 閱讀(192) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 观塘区| 湖南省| 武山县| 海南省| 永靖县| 探索| 民和| 炎陵县| 武宣县| 惠东县| 兴安盟| 沈丘县| 香格里拉县| 大冶市| 前郭尔| 辽阳县| 洞口县| 凤山县| 开阳县| 榕江县| 古蔺县| 辉县市| 鹤峰县| 商河县| 新野县| 凉城县| 寿光市| 濉溪县| 玛沁县| 宣武区| 丰都县| 枞阳县| 伊吾县| 通山县| 手机| 安新县| 宾阳县| 泾源县| 定兴县| 祁门县| 金沙县|