Java實現圖片倒影代碼

bgn4 9年前發布 | 2K 次閱讀 Java

/實現圖片倒影(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>

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