Android中實現圖片倒影的代碼

d6nd 10年前發布 | 842 次閱讀 Java Android

/實現圖片倒影(tested)/
public class ButtonImageActivity extends Activity {
    /* Called when the activity is first created. /
    private ImageView image_btn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        image_btn=(ImageView)findViewById(R.id.image_btn);
        Bitmap bitmap =((BitmapDrawable)getResources().getDrawable(R.drawable.image_btn)).getBitmap();
        image_btn.setImageBitmap(createReflectedImage(bitmap));
        image_btn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });
}
private Bitmap createReflectedImage(Bitmap originalBitmap) {  
    // 圖片與倒影間隔距離  
    final int reflectionGap = 4;  

    // 圖片的寬度  
    int width = originalBitmap.getWidth();  
    // 圖片的高度  
    int height = originalBitmap.getHeight();  

    Matrix matrix = new Matrix();  
    // 圖片縮放,x軸變為原來的1倍,y軸為-1倍,實現圖片的反轉  
    matrix.preScale(1, -1);  
    // 創建反轉后的圖片Bitmap對象,圖片高是原圖的一半。  
    Bitmap reflectionBitmap = Bitmap.createBitmap(originalBitmap, 0,  
            height / 2, width, height / 2, matrix, false);  
    // 創建標準的Bitmap對象,寬和原圖一致,高是原圖的1.5倍。  
    Bitmap withReflectionBitmap = Bitmap.createBitmap(width, (height  
            + height / 2 + reflectionGap), Config.ARGB_8888);  

    // 構造函數傳入Bitmap對象,為了在圖片上畫圖  
    Canvas canvas = new Canvas(withReflectionBitmap);  
    // 畫原始圖片  
    canvas.drawBitmap(originalBitmap, 0, 0, null);  

    // 畫間隔矩形  
    Paint defaultPaint = new Paint();  
    canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);  

    // 畫倒影圖片  
    canvas.drawBitmap(reflectionBitmap, 0, height + reflectionGap, null);  

    // 實現倒影效果  
    Paint paint = new Paint();  
    LinearGradient shader = new LinearGradient(0, originalBitmap.getHeight(),   
            0, withReflectionBitmap.getHeight(), 0x70ffffff, 0x00ffffff,  
            TileMode.MIRROR);  
    paint.setShader(shader);  
    paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  

    // 覆蓋效果  
    canvas.drawRect(0, height, width, withReflectionBitmap.getHeight(), paint);  

    return withReflectionBitmap;  
}  

} </pre>

 本文由用戶 d6nd 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!