【问题标题】:Some advices to create ToggleButton创建 ToggleButton 的一些建议
【发布时间】:2014-08-15 19:44:52
【问题描述】:

我必须像这样创建ToggleButton(应该在任何设备上调整大小)。

然后在ViewGrouponLayout方法中进行布局。

您能告诉我如何创建它吗?


我尝试过这样做:

buttons.xml

<ToggleButton
        android:id="@id/add_favorites_button_id"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/menu_button_selector"
        android:drawableTop="@drawable/star"
        android:textOff=""
        android:textOn=""
        android:contentDescription="Add Favorites"/>

menu_button_selector.xml

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0">
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true">
            <rotate
                    android:fromDegrees="90"
                    android:toDegrees="90"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:drawable="@drawable/round_button_active"/>
        </item>
        <item android:state_checked="false">
            <rotate
                    android:fromDegrees="90"
                    android:toDegrees="90"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:drawable="@drawable/round_button"/>
        </item>

    </selector>
</item>
.....
</level-list>

round_button_active.xml

我有一些背景,只是旋转它。因为按钮应该位于已知度数:0、45、90、...

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <corners android:topLeftRadius="50dp" android:topRightRadius="50dp"/>
        <solid android:color="@color/tb_red_button"/>
        <size android:width="60dp" android:height="60dp"/>
    </shape>
</item>
</layer-list>

然后在onLayout 方法中我对其进行布局:

final View button = parentLayout.getChildAt(i);
button.getBackground().setLevel(i);
button.setOnClickListener(this);
button.layout(x1, y1, x2, y2);

我收到了什么:

在 0、90、180 等度数上的按钮看起来很清楚它们应该是什么

但是

在 45、135 等度数上的按钮被矩形画布切割。即使我旋转它,我也会在矩形画布的范围内进行。

【问题讨论】:

  • 我将首先创建您自己的自定义视图组,然后创建一个自定义切换按钮
  • 是的,非常感谢您的好建议。最好的一个
  • 也许不需要自定义切换按钮 ;)
  • 是的,你是对的,对不起,我花了很多时间创造它(总是错的),这就是为什么我这样回复你的回答;)
  • 祝你好运!因为在 Android 上创建自定义组件并不是最简单的事情

标签: android togglebutton


【解决方案1】:

据我了解,实现此目的的一种可能方法(使用图像)将是

将您在此处的图像视为半圆(两个黑色边框半圆),它是完整圆的一部分。这个圆圈的上半部分是透明的。整个设置将是图像视图中的图像。

红色圆圈拇指也是与上述设置相同大小的图像,除了红色部分外,所有区域都是透明的。把它放在另一个图像视图中

现在将两个 image-view 一个放在另一个上面,红色放在上面。将点击监听器添加到红色图像视图并使用 imageView.setRotate(degree) 旋转它

为了给人一种旋转运动的感觉,只需在很短的时间间隔后调用上述方法并每次递增度数的值。

我添加了一张图片以便更好地理解。蓝色边框是黑色圆圈 image-view 的边界,绿色边框是红色圆圈 image-view 的边界。两者都有一个共同的中心,因此当旋转上部图像视图时,它会在两个黑色圆圈之间的路径之后出现红色圆圈。

【讨论】:

  • 非常感谢您的回复。但是有没有可能为不同大小的按钮(使用形状,没有图像)创建这样的背景。因此,应将其应用于具有不同分辨率的设备。问题是按钮的画布是一个矩形。当我旋转按钮的背景时 - 角度是可见的。
  • 为什么要使用按钮?使用图像视图并在其上设置点击监听器。用户不会注意到差异。在一个图像视图中,您可以设置两个可绘制对象,一个用于背景和 src。这些将形成你的两个黑色圆圈。如我在上面的回答中提到的,对于红色,请使用另一个图像视图。是的,您可以在 xml 中绘制圆形并放置在可绘制文件夹中。对不同的圈子使用不同的 xml。请注意,绿色和蓝色边界只是图像视图大小 n 形状的指标,它们不会可见。
猜你喜欢
  • 2014-03-15
  • 2018-01-05
  • 2015-07-24
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多