Android ApiDemos樣本解析(76):Graphics->Regions

來源:互聯網
上載者:User

二維圖形之間可以通過“加”,“減”,“交”,“異或”等邏輯運算構成新的圖形。

本例使用了兩個矩形通過“加”,“減”,“交”,“異或”構成組合後的映像,Region除支援矩形外,還可以使用Path來定義一個任意地區,然後再組合成複雜形狀。可以參見Android簡明開發教程十四:Context Menu 繪製幾何圖形 “梨子”。

[java] 
canvas.save(); 
canvas.translate(0, 140); 
drawRgn(canvas, Color.RED, "Union", Region.Op.UNION); 
canvas.restore(); 
  
canvas.save(); 
canvas.translate(0, 280); 
drawRgn(canvas, Color.BLUE, "Xor", Region.Op.XOR); 
canvas.restore(); 
  
canvas.save(); 
canvas.translate(160, 140); 
drawRgn(canvas, Color.GREEN, "Difference", Region.Op.DIFFERENCE); 
canvas.restore(); 
  
canvas.save(); 
canvas.translate(160, 280); 
drawRgn(canvas, Color.WHITE, "Intersect", Region.Op.INTERSECT); 
canvas.restore(); 
  
... 
  
private void drawRgn(Canvas canvas, int color, 
 String str, Region.Op op) { 
 if (str != null) { 
 mPaint.setColor(Color.BLACK); 
 canvas.drawText(str, 80, 24, mPaint); 
 } 
  
 Region rgn = new Region(); 
 rgn.set(mRect1); 
 rgn.op(mRect2, op); 
  
 mPaint.setColor(color); 
 RegionIterator iter = new RegionIterator(rgn); 
 Rect r = new Rect(); 
  
 canvas.translate(0, 30); 
 mPaint.setColor(color); 
 while (iter.next(r)) { 
 canvas.drawRect(r, mPaint); 
 } 
 drawOriginalRects(canvas, 0x80); 

canvas.save();
canvas.translate(0, 140);
drawRgn(canvas, Color.RED, "Union", Region.Op.UNION);
canvas.restore();
 
canvas.save();
canvas.translate(0, 280);
drawRgn(canvas, Color.BLUE, "Xor", Region.Op.XOR);
canvas.restore();
 
canvas.save();
canvas.translate(160, 140);
drawRgn(canvas, Color.GREEN, "Difference", Region.Op.DIFFERENCE);
canvas.restore();
 
canvas.save();
canvas.translate(160, 280);
drawRgn(canvas, Color.WHITE, "Intersect", Region.Op.INTERSECT);
canvas.restore();
 
...
 
private void drawRgn(Canvas canvas, int color,
 String str, Region.Op op) {
 if (str != null) {
 mPaint.setColor(Color.BLACK);
 canvas.drawText(str, 80, 24, mPaint);
 }
 
 Region rgn = new Region();
 rgn.set(mRect1);
 rgn.op(mRect2, op);
 
 mPaint.setColor(color);
 RegionIterator iter = new RegionIterator(rgn);
 Rect r = new Rect();
 
 canvas.translate(0, 30);
 mPaint.setColor(color);
 while (iter.next(r)) {
 canvas.drawRect(r, mPaint);
 }
 drawOriginalRects(canvas, 0x80);
}

 

作者: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.