我希望为我的应用实现一个三态滑动按钮。在第一个位置,它应该显示一种颜色,在中心位置,它应该显示另一种颜色,而在结束位置,它应该再次更改颜色。这里我提供了相关图片。
您如何实现这个功能?
您如何实现这个功能?
这可以通过使用RadioGroup来实现。
您需要像这样自定义RadioGroup中的RadioButtons:
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/background_toggler"
android:orientation="horizontal"
android:padding="4dp">
<RadioButton
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button1_background"
android:button="@null"
android:checked="true" />
<RadioButton
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button2_background"
android:button="@null"
android:checked="false" />
<RadioButton
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button3_background"
android:button="@null"
android:checked="false" />
</RadioGroup>
drawable/button1_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/btn1checked"
android:state_checked="true" />
<item
android:drawable="@drawable/btn1unchecked"
android:state_checked="false" />
</selector>
drawable/button2_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/btn2checked"
android:state_checked="true" />
<item
android:drawable="@drawable/btn2unchecked"
android:state_checked="false" />
</selector>
drawable/button3_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/btn3checked"
android:state_checked="true" />
<item
android:drawable="@drawable/btn3unchecked"
android:state_checked="false" />
</selector>
请为所有3个按钮使用相关的可绘制资源。 现在,您可以处理RadioGroup检查更改的事件。
这是我为了自己的需求而开发的,现在分享代码。非常容易做和配置。只需要使用一个switch语句来查找指针位置并执行操作。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/md_green_100"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:text="@string/send"
android:textColor="@color/colorPrimaryDark"
android:textSize="18sp"
android:textStyle="bold" />
<SeekBar
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:backgroundTint="@color/md_green_100"
android:id="@+id/transferSwitch"
android:elevation="5dp"
android:foregroundTint="@color/md_green_100"
android:indeterminateTint="@color/md_green_100"
android:max="2"
android:padding="5dp"
android:progress="1"
android:progressBackgroundTint="@color/md_green_100"
android:progressTint="@color/md_green_100"
android:secondaryProgressTint="@color/md_green_100"
android:thumb="@android:drawable/presence_online"
android:thumbTint="@color/md_green_800"
app:tickMarkTint="@color/md_green_800" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|end"
android:gravity="center"
android:padding="10dp"
android:text="@string/receive"
android:textColor="@color/colorPrimaryDark"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
SeekBar seekBar = findViewById(SEEKBAR);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//Do something here!
switch(progress){
case 0: //Left
case 2: //Right
case 1: default: //Center
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});