如何让Android搜索栏顺利移动()

枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述如何让Android搜索栏顺利移动?相关的知识,希望能为你提供帮助。
我试图让SeekBar的移动更顺畅,而不仅仅是直接跳到这个位置。我正在这样做,因为我有一个SeekBar有3个滑块类型实现选项。
我正在寻找创建一个漂亮的平滑滑块,其中3个选项为“是”,“无选项”,“否”为我的应用程序中的功能,而SeekBar看起来是最好和最简单的方式。
我试过看android动画,看起来有点复杂,所以如果有人可以提供任何帮助那就太好了:)
答案我找到了以下解决方案,使搜索栏平滑移动,但仍然捕捉到有限的值范围。假设您的布局中包含以下视图:

< 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" />

您可以在活动中使用以下代码(在上面的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); } } }

另一答案建立我自己的控制。完成工作:)代码here
另一答案【如何让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() } } })

另一答案这对我来说很好,非常简单直接。
if (currentPosition > 0) { ObjectAnimator animation = ObjectAnimator.ofInt(seekBar, "progress", currentPosition); animation.setDuration(400); animation.setInterpolator(new DecelerateInterpolator()); animation.start(); }

另一答案创建自定义SeekBar
public class SmoothSeekBar extends AppCompatSeekBar implements SeekBar.OnSeekBarChangeListener {private SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener; private boolean mNeedCallListener = true; private ValueAnimator mAnimator; public SmoothSeekBar(Context context) { super(context); init(context); }public SmoothSeekBar(Context context, AttributeSet attrs) { super(context, attrs); init(context); }public SmoothSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); }public void init(Context context) { Context mContext = context; }@Override public void setOnSeekBarChangeListener( SeekBar.OnSeekBarChangeListener onSeekBarChangeListener) { mOnSeekBarChangeListener = onSeekBarChangeListener; super.setOnSeekBarChangeListener(this); }@Override public void setProgress(final int progress) { final int currentProgress = getProgress(); if (mAnimator != null) { mAnimator.cancel(); mAnimator.removeAllUpdateListeners(); mAnimator.removeAllListeners(); mAnimator = null; mNeedCallListener = true; } mAnimator = ValueAnimator.ofInt(currentProgress, progress); mAnimator.setDuration(getResources().getInteger(android.R.integer.config_longAnimTime)); mAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int value = https://www.songbingjia.com/android/(int) animation.getAnimatedValue(); if (value == progress) { mNeedCallListener = true; } else { mNeedCallListener = false; } Logger.e("ProgressBar value ", value + ""); SmoothSeekBar.super.setProgress(value); } }); mAnimator.start(); }@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser || mNeedCallListener) { if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onProgressChanged(seekBar, progress, fromUser); } } }@Override public void onStartTrackingTouch(SeekBar seekBar) { if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onStartTrackingTouch(seekBar); } }@Override public void onStopTrackingTouch(SeekBar seekBar) { if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onStopTrackingTouch(seekBar); } } }

现在在xml中添加SeekBar并享受
< com.yourPackage.SmoothSeekBar android:id="@+id/seekBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content"/>


    推荐阅读