Android ApiDemos樣本解析(67):Graphics->Layers

來源:互聯網
上載者:User

Canvas 在一般的情況下可以看作是一張畫布,所有的繪圖操作如drawBitmap, drawCircle都發生在這張畫布上,這張畫板還定義了一些屬性比如Matrix,顏色等等。

但是如果需要實現一些相對複雜的繪圖操作,比如多層動畫,地圖(地圖可以有多個地圖層疊加而成,比如:政區層,道路層,興趣點層)。

Canvas提供了圖層(Layer)支援,預設情況可以看作是只有一個圖層Layer。如果需要按層次來繪圖,Android的Canvas可以使用SaveLayerXXX, Restore 來建立一些中介層,對於這些Layer是按照“棧結構“來管理的:

 

建立一個新的Layer到“棧”中,可以使用saveLayer, savaLayerAlpha, 從“棧”中推出一個Layer,可以使用restore,restoreToCount。但Layer入棧時,後續的DrawXXX操作都發生在這個Layer上,而Layer退棧時,就會把本層繪製的映像“繪製”到上層或是Canvas上,在複製Layer到Canvas上時,可以指定Layer的透明度(Layer),這是在建立Layer時指定的:

public int saveLayerAlpha(RectF bounds, int alpha, int saveFlags)

本例Layers 介紹了圖層的基本用法:Canvas可以看做是由兩個圖層(Layer)構成的,為了更好的說明問題,我們將代碼稍微修改一下,預設圖層繪製一個紅色的圓,在新的圖層畫一個藍色的圓,新圖層的透明度為0×88。

[java] 
@Override protected void onDraw(Canvas canvas) { 
 canvas.drawColor(Color.WHITE); 
  
 canvas.translate(10, 10); 
  
 mPaint.setColor(Color.RED); 
 canvas.drawCircle(75, 75, 75, mPaint); 
  
 canvas.saveLayerAlpha(0, 0, 200, 200, 0x88, LAYER_FLAGS); 
  
  
 mPaint.setColor(Color.BLUE); 
 canvas.drawCircle(125, 125, 75, mPaint); 
  
 canvas.restore(); 

@Override protected void onDraw(Canvas canvas) {
 canvas.drawColor(Color.WHITE);
 
 canvas.translate(10, 10);
 
 mPaint.setColor(Color.RED);
 canvas.drawCircle(75, 75, 75, mPaint);
 
 canvas.saveLayerAlpha(0, 0, 200, 200, 0x88, LAYER_FLAGS);
 
 
 mPaint.setColor(Color.BLUE);
 canvas.drawCircle(125, 125, 75, mPaint);
 
 canvas.restore();
}在調用canvas.saveLayerAlpha 建立一個新圖層之後,後續的canvas.drawCircle 都會發生的這個新圖層上, canvas.restore() 將這個新圖層繪製的映像“複製”到Canvas的預設圖層上,透明度為0×88。

 
作者:mapdigit
 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.