【问题标题】:seekbar onProgressChange value updates extremely slow in toastseekbar onProgressChange 值更新在吐司中非常慢
【发布时间】:2015-08-07 01:57:18
【问题描述】:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        Toast.makeText(this, String.valueOf(progress), Toast.LENGTH_SHORT).show();
        changeColor(viewOne, progress);
        changeColor(viewTwo, progress);
        changeColor(viewThree, progress);
        changeColor(viewFour, progress);
        changeColor(viewFive, progress);
    }

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

我正在尝试更新搜索栏的值并将其显示在吐司中。但是,toast 更新值的速度非常慢。我不想使用文本框。有没有办法做到这一点?

【问题讨论】:

    标签: android android-studio seekbar android-toast


    【解决方案1】:

    使用弹出窗口。您可以自定义弹出窗口的视图,如文本视图来显示进度。 在 onStartTrackingTouch 方法中,显示弹出窗口。 在 onStopTrackingTouch 方法中,关闭弹出窗口。 在方法 onProgressChanged 中,更改进度。 示例代码:

    package com.example.test;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.PopupWindow;
    import android.widget.SeekBar;
    import android.widget.TextView;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    
    public class MainActivity extends Activity implements OnSeekBarChangeListener {
    
        private SeekBar seek;
        private PopupWindow window;
        private TextView textview;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            seek = (SeekBar) findViewById(R.id.seek);
            seek.setOnSeekBarChangeListener(this);
            window = new PopupWindow(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            textview = new TextView(this);
            textview.setTextSize(16);
            textview.setBackgroundColor(Color.BLACK);
            textview.setTextColor(Color.WHITE);
            window.setContentView(textview);
        }
    
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            // TODO Auto-generated method stub
            textview.setText("progress : " + progress);
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
            window.showAsDropDown(seek);
        }
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
            window.dismiss();
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 我有没有办法使用 Toast.Make 功能来实现这一点?我只是想了解更多。感谢您的解决方案。
    【解决方案2】:

    在班级级别声明 toast

    Toast mToast;
    

    constructoronCreate 中初始化吐司

    protected void onCreate(Bundle savedInstanceState) {
        ...
        mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
    }
    

    那么当你需要展示吐司时

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        mToast.setText("progress : " + progress);
        mToast.show();
    }
    

    现在您的 toast 更新将是即时的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多