【问题标题】:Seek bar progress not working properly寻求栏进度无法正常工作
【发布时间】:2015-04-15 12:51:06
【问题描述】:

首先我想说我不是英语,所以请原谅我的语言错误。 好吧,我有两个重叠的 SeekBar,一个 (seekbar2) 带有一个警报符号作为拇指,另一个 (seekbar) 带有一个可能是“zzz”或斜线的拇指。 这个想法是,当您将搜索栏向右移动时,第二个搜索栏将斜线设置为拇指,并且拇指 alpha 会根据搜索栏进度而增长,并且它与第二个搜索栏中的警报徽标重叠,因此当进度为 100% 时最终结果是交叉警报(解除警报的符号),完全相同,但“zzz”图标在另一个方向,因此当进度为 0 时,结果是贪睡警报符号。 你懂我的意思吗? 事实是:这在 Lollipop(sdk 版本 21)中运行良好,但在旧版本中却不行。在旧版本中,第二个搜索栏从正确的点开始,但它比第二个移动更多,所以最终结果是一个警报和一个斜线(或“zzz”),我不知道为什么。

这是我的 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="#ffffff">

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar2"
    android:progress="50"
    android:thumb="@drawable/ic_thumb"
    android:secondaryProgress="@android:color/transparent"
    android:progressDrawable="@drawable/line"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginBottom="90dp"
    android:paddingRight="35dp"
    android:paddingLeft="35dp"/>

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar"
    android:progress="50"
    android:thumb="@drawable/ic_thumb"
    android:secondaryProgress="@android:color/transparent"
    android:progressDrawable="@drawable/line"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginBottom="90dp"
    android:paddingRight="35dp"
    android:paddingLeft="35dp"/>

这是我的 MainActivity.java:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
    final SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
    final Drawable dismiss = getResources().getDrawable(R.drawable.ic_dismiss);
    final Drawable snooze = getResources().getDrawable(R.drawable.ic_thumb_snooze);
    final Drawable alarm = getResources().getDrawable(R.drawable.ic_thumb);
    seekBar2.setMax(255);
    seekBar.setMax(255);
    seekBar.setProgress(seekBar.getMax()/2);
    seekBar2.setProgress(seekBar.getMax()/2);
    seekBar2.setEnabled(false);
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            seekBar2.setProgress(progress);
            if (progress >seekBar.getMax()/2 && fromUser && progress!=seekBar.getMax()){
                seekBar.setThumb(dismiss);
                dismiss.setAlpha((progress - (seekBar.getMax() / 2)) * 2);//*2*255
            }
            else if (progress <seekBar.getMax()/2 && fromUser && progress!=0){
                seekBar.setThumb(snooze);
                snooze.setAlpha(Math.abs((progress - (seekBar.getMax() / 2)) * 2));
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) { }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            Log.e("progress2",seekBar.getProgress()+"");
            int progress = seekBar.getProgress();
            if (progress <seekBar.getMax()/2) {
                if (progress < (seekBar.getMax() / 100 * 25)) {
                    ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(250);
                    Toast.makeText(MainActivity.this, "Snoozed!", Toast.LENGTH_LONG).show();
                    finish();
                } else {
                    seekBar.setProgress(seekBar.getMax() / 2);
                    seekBar.setThumb(alarm);
                }
            }else if (progress >seekBar.getMax()/2){
                if (progress >(seekBar.getMax())/100*98){
                    ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(250);
                    Toast.makeText(MainActivity.this,"Dismissed!",Toast.LENGTH_LONG).show();
                    finish();
                }
                else{
                    seekBar.setProgress(seekBar.getMax()/2);
                    seekBar.setThumb(alarm);
                }
            }
        }
    });
}

}

有什么想法吗? 感谢您对所有答案的建议!

编辑: 这是一个视频,展示了棒棒糖(第一部分)中的工作原理(正确工作)以及棒棒糖前的工作原理(错误工作)(第二部分): https://drive.google.com/file/d/0BzFDeTFWJtOLWnZOZG9OSHRfM0U/view?usp=sharing

【问题讨论】:

    标签: android android-layout seekbar android-seekbar


    【解决方案1】:

    在为seekBar 设置OnSeekBarChangeListener 之前尝试添加这两行:

    final Drawable seekBar2Thumb = getResources().getDrawable(
            R.drawable.line);
    seekBar2.setThumb(seekBar2Thumb);
    

    SeekBar 的 android 文档中: http://developer.android.com/reference/android/widget/AbsSeekBar.html

    对于setThumb(Drawable thumb),它表示当您设置有效的Drawable 时,拇指偏移量会被修改,这发生在您为seekBar 设置拇指时。

    【讨论】:

    • 欢迎您,您将 SeekBar 与 alpha 转换一起使用的想法也很酷......
    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多