2015-12-08 102 views
0

我正在嘗試繪製一個看起來像帶有陰影的圓圈的繪圖。它需要縮放到不同的尺寸,並需要在畫布上繪製。我使用setBounds來設置座標和縮放。繪製在畫布上時的XML可繪製比例

我繪製:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:bottom="0dp" 
     android:left="5dp" 
     android:right="5dp" 
     android:top="10dp"> 
     <shape android:shape="oval"> 
      <size 
       android:width="115dp" 
       android:height="115dp" /> 
      <solid android:color="@color/level_button_dark" /> 
     </shape> 
    </item> 
    <item 
     android:bottom="5dp" 
     android:left="5dp" 
     android:right="5dp" 
     android:top="5dp"> 
     <shape android:shape="oval"> 
      <size 
       android:width="115dp" 
       android:height="115dp" /> 
      <solid android:color="@color/level_button" /> 
     </shape> 
    </item> 
</layer-list> 

我的繪製代碼

mButtonDrawable.setBounds(20, 20, 220, 220); 
mButtonDrawable.draw(canvas); 
mButtonDrawable.setBounds(270, 20, 370, 120); 
mButtonDrawable.draw(canvas); 
mButtonDrawable.setBounds(420, 20, 470, 70); 
mButtonDrawable.draw(canvas); 

結果:

enter image description here

我要實現一致的外觀爲所有規模。 在模擬器API 18上測試。

回答

2

雖然@RexSplode方法是有效的,但我發現了一種可以用一個drawable去做的方法。您不應該致電setBounds()並使用畫布進行操作。

參見下面的例子。

mButtonDrawable.setBounds(0, 0, mButtonDrawable.getIntrinsicWidth(), mButtonDrawable.getIntrinsicHeight()); 

canvas.save(); 
canvas.translate(20, 20); 
canvas.scale(1, 1); 
mButtonDrawable.draw(canvas); 
canvas.restore(); 

canvas.save(); 
canvas.translate(420, 20); 
canvas.scale(0.5f, 0.5f); 
mButtonDrawable.draw(canvas); 
canvas.restore(); 

canvas.save(); 
canvas.translate(620, 20); 
canvas.scale(0.25f, 0.25f); 
mButtonDrawable.draw(canvas); 
canvas.restore(); 

結果:

enter image description here

我有個想法從ImageView source

0

問題是你的圓圈被綁定到相同的座標。所以,當你調用

public void setBounds (int left, int top, int right, int bottom) 

它的座標變化,其中兩個圓將被繪製,他們之間的距離也應該變得更小。所以我想那個drawable不會。每個圓圈需要兩個單獨的可繪圖。並獨立改變其界限。這就是你如何達到預期的效果。

+0

感謝您的回答,我剛剛發現了一個更好的解決方案。請檢查我的答案。 – vyndor

+0

很酷。我會記住這一點! – RexSplode