Canvas.saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags):
本身和save方法差不多,但是它單獨分配了一個畫布用於繪制圖層。它定義了一個畫布區域(可設置透明度),此方法之后的所有繪制都在此區域中繪制,直到調用canvas.restore()方法。例如:在調用saveLayerAlpha方法之前繪制了一個“圓形”,在調用saveLayerAlpha方法之后繪制了一個“圓形”此時這兩個圓形並不在同一個圖層。下面給出一個例子以及樣圖來說明這個問題。
實例代碼:
package cn.yw.lib.graphics; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class LayerActivity extends Activity{ private LayerView view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view = new LayerView(this); setContentView(view); } /** * 測試圖層 * @author yw-tony * */ class LayerView extends View{ private Paint paint; private static final int LAYER_FLAGS = Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG; public LayerView(Context context) { super(context); paint = new Paint(); paint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //清屏操作 canvas.drawColor(Color.GRAY); //畫布向右下移動50像素 canvas.translate(50, 50); paint.setColor(Color.RED); canvas.drawCircle(50, 50, 25, paint); canvas.saveLayerAlpha(0, 0, 200, 200, 0x88, LAYER_FLAGS); paint.setColor(Color.GREEN); canvas.drawCircle(60, 60, 25, paint); canvas.restore(); } } }
樣圖: