带有 SeekBar 的 Android - 防止 'thumb' 在触摸 SeekBar 以拖动/滚动屏幕时移动

标签 android seekbar

我有一个带有 TableLayout 的 Android 应用程序,每行都有一个 SeekBar 和一个 ToggleButton。这些行超出了屏幕的可见范围,因此它是可滚动的。当我触摸并拖动以向上滚动页面并在此过程中触摸 SeekBar 时,它会立即更改“拇指”的位置而不是滚动页面。但是,ToggleButton 不会以这种方式运行;相反,我可以在按钮上开始拖动并滚动然后释放,而不需要 ToggleButton 改变状态。

有没有办法让 SeekBar 以这种方式运行,以便触摸它开始拖动不会导致栏改变位置,而是滚动页面?

最佳答案

我遇到过类似的问题。我能找到的唯一解决方案(当搜索栏位于 ListView 中时)是在单击该项目之前禁用搜索栏。

解决方案

在 ArrayAdapter 中,我将 enabled 和 focusable 都设置为 false 并添加了 SeekBar 监听器,将属性设置为 false 允许我使用列表项 onItemClicked 监听器。在 onItemCLickListener 中,我检索了搜索栏,将属性设置为 true,这意味着它可以向上或向下滑动。然后我在调整完成后将其禁用。下面的代码

ArrayAdapter fragment

这段代码是在列表项的创建中,其中放置了搜索栏

    seekBar.setClickable(false);
    seekBar.setFocusable(false);
    seekBar.setEnabled(false);

    /* attach listener */
    attachProgressUpdatedListener(seekBar, positionOfItemInList);

附加进度更新监听器

此方法将监听器附加到 arrayAdapter 类中的搜索栏

private void attachProgressUpdatedListener(SeekBar seekBar,
    final int position) {

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    public void onStopTrackingTouch(SeekBar seekBar) {
    int progress = seekBar.getProgress();
    int task_id = (Integer) seekBar.getTag();

    TaskHandler taskHandler = new TaskHandler(DBAdapter
        .getDBAdapterInstance(getContext()));

    taskHandler.updateTaskProgress(task_id, progress);

    mList.get(position).setProgress(progress);

    //need to fire an update to the activity
    notifyDataSetChanged();
    seekBar.setEnabled(false);

    }

    public void onStartTrackingTouch(SeekBar seekBar) {
    // empty as onStartTrackingTouch listener not being used in
    // current implementation

    }

    public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    // empty as onProgressChanged listener not being used in
    // current implementation

    }
});

}

OnItemCLickListener

这个 fragment 来自包含 ListView 的 Activity 。

taskListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
    SeekBar sb = (SeekBar) view.findViewById(R.id.seek);
    sb.setFocusable(true);
    sb.setEnabled(true);

    }
});

关于带有 SeekBar 的 Android - 防止 'thumb' 在触摸 SeekBar 以拖动/滚动屏幕时移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766911/

相关文章:

android - 监控应用电源使用情况

android - Kotlin位置离我的位置很远我该如何使其更加准确

android - 在 Android 操作栏中下拉搜索栏?

android - 如何在android中动态改变位图的不透明度

Android 如何在搜索栏中添加间隔文本

Android:一个对象的360度 View

android - 从混淆的 classes.jar 中移除外部库(在 Android Studio/Gradle 中)

android - Xamarin PCL 与 SL 混淆

android - 在 Android 中实现 SeekBar Listener 接口(interface)时出现空指针异常

c# - 如何添加mediaelement搜索栏