Android Switch拇指图像拉伸

Posted

技术标签:

【中文标题】Android Switch拇指图像拉伸【英文标题】:Android Switch thumb image stretched 【发布时间】:2014-07-01 08:25:11 【问题描述】:

我需要在 android 应用程序中自定义 Switch。 我正在使用此代码:

<Switch
    android:id="@+id/switchmode"
    android:layout_
    android:layout_
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true" 
    android:textOn=""
    android:textOff=""
    android:switchMinWidth="0dp"
    android:thumb="@drawable/switch_bg"
    android:track="@drawable/track_bg"
    android:layout_marginBottom="20dp" 
    android:layout_marginRight="20dp" />

track_bg 文件是:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item                               android:drawable="@drawable/switch_track" />
</selector>

switch_bg 文件是:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/switch_enable" />
    <item android:state_pressed="true"  android:drawable="@drawable/switch_press" />
    <item android:state_checked="true"  android:drawable="@drawable/switch_check_on" />
    <item                               android:drawable="@drawable/switch_enable" />
</selector>
switch_check_on 为 32 x 31 switch_enable 为 32 x 31 switch_press 为 32 x 31 switch_track 为 64 x 31

结果是一个拉伸的图像(它应该是一个圆形但它被压扁了):

https://www.dropbox.com/s/07iigspuh3dpfnh/switchstreched.jpg

有什么明显的错误吗?

【问题讨论】:

【参考方案1】:

创建9-patch 图像并指定Android 应如何拉伸它。你可以阅读更多here

【讨论】:

应该修补什么?轨道文件或拇指文件? 两者。打开图像 9-patch 编辑器并检查 Android 将如何拉伸它。拉伸不取决于您的开关工作逻辑,而是 - android 设备分辨率和密度。因此,如果您有 1 个适用于所有分辨率和密度的图像资源 - 将其设为 9-patch,它将按指定规则进行拉伸。 看看在这个示例项目中是如何实现的github.com/hearbeathorror/Switch-Compat-Changing-Colors/tree/…

以上是关于Android Switch拇指图像拉伸的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中更改 UISlider 拇指的大小

如何在为拇指使用自定义绘图时保持切换拇指阴影/高度?

TableRow 中的居中和拉伸按钮

Android - 如何动态更改 SwitchPreference 开关的拇指/轨道颜色

Android:拉伸和裁剪图像(但仍然是纵横比)

将图像放在另一个在 Android 中拉伸的图像上