2015-12-08 69 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