一.Xfermode的簡單使用
1.第一次用canvas繪製的爲Dst層 第二次爲Src
圖片圓角效果:
private void innitView() {
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.test2);
out = Bitmap.createBitmap(bmp.getWidth(),
bmp.getHeight(),
Config.ARGB_8888);
Canvas canvas = new Canvas(out); //使用canvas進行繪圖 所有操作結果將直接作用在out上
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawRoundRect(new RectF(0, 0, bmp.getWidth(), bmp.getHeight()),25,25,paint);
//繪製一個圓角矩形
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//爲畫筆增加Xfermode效果
canvas.drawBitmap(bmp, 0, 0, paint);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(out, 0,0, null);
//將帶有效果的out圖繪製出來
}
二.鏡面與倒影效果
private void innitView() {
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.test);
Matrix matrix = new Matrix(); //建立一個矩陣對象
matrix.setScale(1, -1); //將Y軸取反 得到倒影
out = Bitmap.createBitmap(bmp,0,0,
bmp.getWidth(),
bmp.getHeight(),
matrix,
true);//複製一張相同的圖
paint = new Paint();
paint.setShader(new LinearGradient(0, bmp.getHeight(), 0, bmp.getHeight()*2,
0XDD000000, 0X10000000, Shader.TileMode.CLAMP));//爲畫筆設置漸變的效果
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bmp, 0,0, paint);
canvas.drawBitmap(out, 0, out.getHeight(), null);
canvas.drawRect(0, out.getHeight(), out.getWidth(), out.getHeight()*2, paint);
}