如何让Android搜索栏顺利移动?

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)

  • 如果对这个问题进行了低估,请解释问题的答案 - 记住,downvoting只适用于没有付出任何努力或答案是危险的极端情况.如果答案是危险的,我想知道为什么!谢谢. (5认同)
  • 这就是全部?几乎不会炸毁你的应用程序吗?我编辑了代码以删除那些不必要的转换(任何人都可以做到这一点 - 无需投票). (4认同)
  • 如果答案是错误的,请注意,如果可以通过几行删除来纠正.糟糕的downvoters同样有责任搞砸SO. (4认同)

And*_*sam 6

你不需要自己构建任何东西,只要用户 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)


Joe*_*son 5

建立我自己的控制.完成工作:)代码在这里

  • 作为承诺 - https://github.com/kennydude/Speaker/blob/master/src/me/kennydude/speaker/SmoothSeekBar.java该位置将被更新,代码更新 (3认同)