android - 移动 Seekbar 不流畅
问题描述
我有 Seekbar,我实现的源代码如下:
seekProgress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
adjustCombination(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
因为 function:adjustCombination(progress) 需要 0,2s 才能完成执行,所以当我移动 Seekbar 时,它并不顺利。那么我该如何解决这个问题呢?
解决方案
您可以像这样使用 AsyncTask 执行后台任务,
seekProgress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
new getData().execute(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
现在,您必须定义 getData() 来执行和传递您需要的参数。在你的情况下,我们必须通过进度,
private class getData extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... progress) {
// perform operation you want with String "progress"
String value = "hello" + progress;
return value;
}
@Override
protected void onPostExecute(String progressResult) {
// do whatever you want in this thread like
// textview.setText(progressResult)
super.onPostExecute(progressResult);
}
}
因此,PreExecute 方法将在后台执行任何任务之前执行,然后您的 doInBackground 方法将被调用,并且在 doInBackground onPostExecute 方法将被调用后,您将在此方法中传递参数,该方法将接收从 doInBackground 方法返回的结果。我希望你能明白。
推荐阅读
- python - 我想播放文件夹中选定的 mp3 文件,但它不起作用
- postgresql - Ms Access to PostreSQL 不显示附件 & 反之亦然
- php - 如何使用外键打印表格
- android - 模拟器:错误:无法从内核映像文件中获取内核版本
- c - 重命名函数并确定其工作方式
- nodes - 如何使用 bc 从头节点到客户端节点
- javascript - 使用 router.put 和 router.delete 的 PUT 和 GET 方法不起作用(快递)
- java - 更新 MutableLiveData 时可观察到的抛出异常
- terraform - Terraform 配置程序 - 无法读取 ssh 私钥:找不到密钥
- amazon-dynamodb - 如何静默运行 aws cli 命令以创建 dynamodb 表