我尝试使用XML layer-list drawable创建一个简单的插图
我有两个形状,一个圆圈和一个矩形
我想要一个不按比例的圆圈
以下是布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/shape5"
android:layout_gravity="center"
android:scaleType="center"
/>
</LinearLayout>
这是shape5.xml drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:top="0dp" android:left="0dp">
<shape android:shape="rectangle" android:scaleType="center">
<stroke android:width="2dp" android:color="@android:color/holo_red_light" />
<size android:width="200dp" android:height="100dp"/>
</shape>
</item>
<item android:top="10dp" android:left="10dp">
<shape android:shape="oval" android:gravity="center" android:scaleType="center" >
<stroke android:width="2dp" android:color="@android:color/holo_blue_light" />
<corners android:radius="10dp" />
<size android:width="20dp" android:height="20dp"/>
</shape>
</item>
</layer-list>
结果图如下所示:
很明显,项目android:top可以完成工作,但没有什么能阻止形状缩放。大小宽度不起作用,android:scaleType =“center”也不起作用。
我快速查看了LayerDrawable.java实现。看起来像在幕后,从项目属性创建插入。所以我想通过计算那些我可以达到结果,我想要的。这是唯一的方法吗?
更新
根据这个answer,我知道操纵项目的android:top,android:left等,我可以创建一个虚拟插图,可以根据我的需要扩展我的“形状”。 我查了一遍,这是对的。所以这是一个解决方法。然而,我对它的反直觉感到非常失望。我仍然希望有人能指出我一种简单的方法来禁用缩放。
更新: 根据{{3}},设置ImageView scaleType应该已经阻止了缩放。显然在我的情况下,它没有用。有些东西不见了。
答案 0 :(得分:6)
给你的圆圈绘制相同的高度和宽度,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<solid
android:color="@color/grey" />
<size
android:width="16dp"
android:height="16dp"/>
</shape>
作为高度和宽度放置的值无关紧要,重要的是高度=宽度。将它们视为纵横比,您需要一个完美圆的比率,即1:1。
您不必担心确切值的原因是因为drawable将通过scaleType属性进行缩放。
将drawable插入ImageView后,您可以设置scaleType以缩放它:
scaleType = fitCenter - &gt; Drawable将与ImageView的大小相同,但将保持完美的圆形! scaleType = centerInside - &gt; Drawable将是您在参数中指定的高度和宽度 等...
答案 1 :(得分:0)
将您的shape
绘图对象放入layer-list
并将android:gravity="center"
放入item
标记中。例如,我在TextView
中有几个LinearLayout
,它们的大小由weight
确定,所以这些视图不是完美的正方形。
在TextView
中,我定义了background
:android:background="@drawable/button_selector"
选择器的定义如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/btn_pressed" />
<item android:state_pressed="false" android:drawable="@android:color/transparent"/>
</selector>
可绘制:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="center">
<shape
android:shape="oval">
<stroke
android:width="@dimen/mat2"
android:color="@color/dodger_blue"/>
<size
android:width="@dimen/mat70"
android:height="@dimen/mat70"/>
</shape>
</item>
</layer-list>
答案 2 :(得分:-2)
只需将public IObservable<float> Movement;
void Start ()
{
this.Movement = Observable.EveryUpdate()
.Select(_ => Input.GetAxis("Horizontal") )
.Where( f => f > 0.01f || f < -0.01f);
this.Movement.Subscribe(f => Debug.Log(f))
.AddTo(this);
}
放入商品标记