Joe*_*son 11 animation android widget
我试图让SeekBar的移动更顺畅,而不仅仅是直接跳到这个位置.我正在这样做,因为我有一个SeekBar有3个滑块类型实现选项.
我正在寻找创建一个漂亮的平滑滑块,其中3个选项为"是","无选项","否"为我的应用程序中的功能,而SeekBar看起来是最好和最简单的方式.
我试过看Android动画,看起来有点复杂,所以如果有人可以提供任何帮助那就太好了:)
Rus*_*uss 13
我找到了以下解决方案,使搜索栏平滑移动,但仍然捕捉到有限的值范围.假设您的布局中包含以下视图:
<SeekBar
android:id="@+id/sldProgress"
style="@style/MySliderStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50" />
<TextView
android:id="@+id/lblProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5" />
Run Code Online (Sandbox Code Playgroud)
您可以在活动中使用以下代码(在上面的xml中更改android:max的值,并根据您的需要更改下面代码中的平滑因子 - 更高的值=更平滑):
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sliderListener sldListener = new sliderListener();
SeekBar sldProgress = (SeekBar) findViewById(R.id.sldProgress);
sldProgress.setOnSeekBarChangeListener(sldListener);
}
private class sliderListener implements OnSeekBarChangeListener {
private int smoothnessFactor = 10;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress = Math.round(progress / smoothnessFactor);
TextView lblProgress = (TextView) findViewById(R.id.lblProgress);
lblProgress.setText(String.valueOf(progress));
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
seekBar.setProgress(Math.round((seekBar.getProgress() + (smoothnessFactor / 2)) / smoothnessFactor) * smoothnessFactor);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你不需要自己构建任何东西,只要用户 android 动画它会为你做这件事
用 kotlin 编写的代码
mySeekbar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
//Todo: code
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
if (seekBar.progress > 70) {
ObjectAnimator.ofInt(seekBar, "progress", 100).setDuration(100).start()
} else if (seekBar.progress < 30) {
ObjectAnimator.ofInt(seekBar, "progress", 0).setDuration(100).start()
} else {
ObjectAnimator.ofInt(seekBar, "progress", 50).setDuration(100).start()
}
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13870 次 |
| 最近记录: |