我必须像这样创建ToggleButton
(应该在任何设备上调整大小)。
然后在ViewGroup
的{{1}}方法中进行布局。
您能否提供一些如何创建它的想法?
我试着这样做:
buttons.xml
onLayout
menu_button_selector.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"/>
round_button_active.xml
我有一些背景,只是旋转它。因为按钮应该以已知的度数定位:0,45,90,......
<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>
然后在<?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
我收到了什么:
在0,90,180等度数按钮看起来相当清楚它们应该是什么
但
on 45,135等度按钮由矩形画布切割。即使我旋转它,我也会在矩形画布的范围内进行旋转。
答案 0 :(得分:0)
根据我的理解,实现这一目标的一种可能方式(使用图像)就像
将此处的图像视为半圆(两个黑色边框半圆),这是整圆的一部分。这个圆圈的上半部分是透明的。整个设置将是图像视图内的图像。
红色圆圈拇指也是与上述设置尺寸相同的图像,除红色部分外,所有区域都是透明的。把它放在另一个图像视图
中现在将两个图像视图放在另一个上面,红色一个放在顶部。将单击侦听器添加到红色图像视图并使用imageView.setRotate(degree)
为了给出像感觉一样的旋转运动,只需在很短的间隔后调用上面的方法并每次递增度数值。
我正在添加图片以便更好地理解。蓝色边框是黑色圆圈图像视图的边界,绿色边框是红色圆圈图像视图的边界。两者都有一个共同的中心,所以当上面的图像视图旋转时,它会在两个黑色圆圈之间的路径后面出现红色圆圈。