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