为什么透明笔划仅显示宽度的一半?

时间:2016-02-05 14:45:02

标签: android android-layout android-styles android-shape

我尝试使用<shape>来显示按钮的按下状态。为此,我在正常状态下使用透明色的笔划,在按下状态下使用彩色笔划:

button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/button_normal"/>
</selector>

button_pressed.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#0F0" />
    <stroke android:width="@dimen/size_medium" android:color="#F00" />

    <padding android:left="@dimen/size_medium" android:top="@dimen/size_medium" android:right="@dimen/size_medium"
        android:bottom="@dimen/size_medium" />
</shape>

button_normal.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00F" />
    <stroke android:width="@dimen/size_medium" android:color="#0000" />
</shape>

这是我的测试布局:

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/action_sign_in"
    android:textStyle="bold"
    android:layout_marginTop="16dp"
    android:background="@drawable/button"
    android:textColor="#ffffff"
    android:textAlignment="viewStart"
    android:textAppearance="@null"
    android:textSize="15sp"
    android:enabled="true"/>

这就是half of stroke

的样子

P.S。额外的问题:为什么填充用于两种状态,即使它只设置在按下状态?

1 个答案:

答案 0 :(得分:1)

笔划在笔划路径的两侧均匀分割。如果有办法去掉&#34;剥离&#34;第二张图像上的红色轮廓,您会看到绿色框与第一张图像中的蓝色框完全相同。而你的想法是&#34;填充&#34;在第一张图片中实际上是透明笔划的一部分。

尝试实验:使笔触颜色半透明而不是透明,您将能够看到笔划如何跨越到形状的中途。

看起来好像Shape XML中没有任何方法可以指定抚摸形状的内部或外部,所以如果这真的是你需要的,你可能需要自己动手Canvas.draw()调用代码。