• Android 幾種圖像特效處理的集錦

    1
    Android Java XML C/C++ 14165 次瀏覽
    大家好,這一節給大家分享的是Android中幾種圖像特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等.

    廢話少說了,直接講解今天的實例,本例主要是先獲取壁紙(getWallpaper()),然后對當前壁紙的一些特效處理.大家按步驟一步一步來:
    第一步:新建一個Android工程命名為ImageDemo,工程結構如下:
    204701_aa4q_195301.jpg

    第二步:新建一個.java文件,命名為ImageUtil.java,在里面定義一些圖片處理方法,代碼如下:

    package com.android.tutor;  
    import android.graphics.Bitmap;  
    import android.graphics.Canvas;  
    import android.graphics.LinearGradient;  
    import android.graphics.Matrix;  
    import android.graphics.Paint;  
    import android.graphics.PixelFormat;  
    import android.graphics.PorterDuffXfermode;  
    import android.graphics.Rect;  
    import android.graphics.RectF;  
    import android.graphics.Bitmap.Config;  
    import android.graphics.PorterDuff.Mode;  
    import android.graphics.Shader.TileMode;  
    import android.graphics.drawable.Drawable;  
    public class ImageUtil {  
          
        //放大縮小圖片   
        public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){  
            int width = bitmap.getWidth();  
            int height = bitmap.getHeight();  
            Matrix matrix = new Matrix();  
            float scaleWidht = ((float)w / width);  
            float scaleHeight = ((float)h / height);  
            matrix.postScale(scaleWidht, scaleHeight);  
            Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);  
            return newbmp;  
        }  
        //將Drawable轉化為Bitmap   
         public static Bitmap drawableToBitmap(Drawable drawable){  
                int width = drawable.getIntrinsicWidth();  
                int height = drawable.getIntrinsicHeight();  
                Bitmap bitmap = Bitmap.createBitmap(width, height,  
                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
                                : Bitmap.Config.RGB_565);  
                Canvas canvas = new Canvas(bitmap);  
                drawable.setBounds(0,0,width,height);  
                drawable.draw(canvas);  
                return bitmap;  
                  
            }  
           
         //獲得圓角圖片的方法   
        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;  
        }  
        //獲得帶倒影的圖片方法   
        public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){  
            final int reflectionGap = 4;  
            int width = bitmap.getWidth();  
            int height = bitmap.getHeight();  
              
            Matrix matrix = new Matrix();  
            matrix.preScale(1, -1);  
              
            Bitmap reflectionImage = Bitmap.createBitmap(bitmap,   
                    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(bitmap, 0, 0, null);  
            Paint deafalutPaint = new Paint();  
            canvas.drawRect(0, height,width,height + reflectionGap,  
                    deafalutPaint);  
              
            canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);  
              
            Paint paint = new Paint();  
            LinearGradient shader = new LinearGradient(0,  
                    bitmap.getHeight(), 0, bitmapWithReflection.getHeight()  
                    + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);  
            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;  
        }  
          
    }  
    第三步:修改main.xml布局文件,主要放了兩個ImageView控件,代碼如下:
        
          
           
    第四步:修改主核心程序,ImageDemo.java,代碼如下:
    package com.android.tutor;  
    import android.app.Activity;  
    import android.graphics.Bitmap;  
    import android.graphics.drawable.Drawable;  
    import android.os.Bundle;  
    import android.widget.ImageView;  
    public class Imagedemo extends Activity {  
        private ImageView mImageView01,mImageView02;  
          
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
            setupViews();  
        }  
         
        private void setupViews(){  
            mImageView01 = (ImageView)findViewById(R.id.image01);  
            mImageView02 = (ImageView)findViewById(R.id.image02);  
              
            //獲取壁紙返回值是Drawable   
            Drawable drawable = getWallpaper();  
            //將Drawable轉化為Bitmap   
            Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);  
            //縮放圖片   
            Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);  
            //獲取圓角圖片   
            Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);  
            //獲取倒影圖片   
            Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);  
            //這里可以讓Bitmap再轉化為Drawable   
    //      Drawable roundDrawable = new BitmapDrawable(roundBitmap);          
    //      Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);          
    //      mImageView01.setBackgroundDrawable(roundDrawable);   
    //      mImageView02.setBackgroundDrawable(reflectDrawable);   
                      
            mImageView01.setImageBitmap(roundBitmap);  
            mImageView02.setImageBitmap(reflectBitmap);  
        }  
            
             
    }

    第五步:運行上述工程,查看效果如下:

    Android 幾種圖像特效處理的集錦

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色