SeekBar setProgress 丢弃次要进度

2024-05-08

我的小学和中学的进步是同时增长的,中学的进步比小学的进步快。 每次我更新主要进度时,次要进度都会丢失(就像它为零或小于主要进度一样)。这会产生令人讨厌的闪烁。

我发现的唯一解决方法是在设置主数据库后将辅助数据库设置为自身。我添加了“+1”,因为 SeekBar 有一个检查,如果我设置相同的值,则不会重绘。

        mSeekBar.setProgress(newPosition);
        mSeekBar.setSecondaryProgress(mSeekBar.getSecondaryProgress()+1); // WTF?

第二行可能会修复它,但它看起来很荒谬,而且我认为效率也很低。

这发生在 Lollipop (5.0.1) - API 21 上。 它以前工作得很好 - 不明白为什么。

如果我针对 API 级别 19 进行构建,则效果很好。 (视频:API19搜索栏 http://youtu.be/7Xo1v9GHtJ4)

targetSdkVersion 19
compile 'com.android.support:appcompat-v7:19.+'

如果我针对 API 级别 21 进行构建,它就会闪烁。 (视频:API21SeekBar http://youtu.be/_tbGEgp6uJs)

targetSdkVersion 21
compile 'com.android.support:appcompat-v7:21.+'

完整的示例活动代码如下:

int delay1 = 1000;
int delay2 = 200;
int primaryProgress;
int secondaryProgress;

boolean mStarted;
Button mButton;
SeekBar mSeekBar;
Handler h1 = new Handler();
Handler h2 = new Handler();

Runnable primary = new Runnable() {
    @Override
    public void run() {
        primaryProgress = (primaryProgress + 1) % 100;
        mSeekBar.setProgress(primaryProgress);
        h1.postDelayed(primary, delay1);
    }
};

Runnable secondary = new Runnable() {
    @Override
    public void run() {
        secondaryProgress = (secondaryProgress + 1) % 100;
        mSeekBar.setSecondaryProgress(secondaryProgress);
        h2.postDelayed(secondary, delay2);
    }
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mButton = (Button)findViewById(R.id.button);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            buttonClick();
        }
    });
    mSeekBar = (SeekBar)findViewById(R.id.seekBar);
}

private void buttonClick() {
    mStarted = !mStarted;
    if (mStarted) {
        mButton.setText("Started");
        h1.postDelayed(primary, delay1);
        h2.postDelayed(secondary, delay2);
    } else {
        mButton.setText("Stopped");
        h1.removeCallbacks(primary);
        h2.removeCallbacks(secondary);
    }

}

这已在下一个 Android 版本中修复,但目前最好的解决方法可能是复制scrubber_progress_horizontal_material.xml及其来自 SDK 资源的 9-patch PNG(<sdk-root>/platforms/android-21/data/res/...),然后重新排列标签,以便<layer-list>是在根部。

修改后的 XML 应该如下所示:

drawable-v21/scrubber_progress_horizo​​ntal_material_fixed.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <nine-patch
            android:src="@drawable/scrubber_track_mtrl_alpha"
            android:tint="?android:attr/colorControlNormal" />
    </item>
    <item android:id="@android:id/secondaryProgress">
        <scale android:scaleWidth="100%">
            <selector>
                <item android:state_enabled="false">
                    <color android:color="@android:color/transparent" />
                </item>
                <item>
                    <nine-patch
                        android:src="@drawable/scrubber_primary_mtrl_alpha"
                        android:tint="?android:attr/colorControlNormal" />
                </item>
            </selector>
        </scale>
    </item>
    <item android:id="@android:id/progress">
        <scale android:scaleWidth="100%">
            <selector>
                <item android:state_enabled="false">
                    <color android:color="@android:color/transparent" />
                </item>
                <item>
                    <nine-patch
                        android:src="@drawable/scrubber_primary_mtrl_alpha"
                        android:tint="?android:attr/colorControlActivated" />
                </item>
            </selector>
        </scale>
    </item>
</layer-list>

然后进行适当的修改values-v21/styles.xml和/或您的布局 XML,以便您在 API 21+ 上默认使用此背景。如果您需要的话,我可以提供一些示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SeekBar setProgress 丢弃次要进度 的相关文章

  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • (Ionic 2)尝试回退到 Cordova-lib 执行时发生错误:TypeError:无法读取未定义的属性“then”

    Edit 使用 ionic 2 时会发生这种情况 我知道它还不稳定 但我认为可能有一些解决方案 因为其他人似乎没有遇到这个问题 Edit end 由于某种原因 我在尝试使用 ionic build android 和 ionic build
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 应用程序未安装在 Android 模拟器上

    我正在 android Geocoder 中开发一个应用程序 当我运行该应用程序时 它会显示 2011 01 11 11 08 13 GeoTourProject 自动目标模式 使用现有模拟器 emulator 5554 运行兼容的 AVD
  • Android 版 Robotium - solo.searchText () 不起作用

    我在使用 Robotium 时遇到 searchText 函数问题 我正在寻找这个字符串
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 材质设计图标颜色

    应该是哪种颜色 暗 材质图标 在官方文档上 https www google com design spec style icons html icons system icons https www google com design s
  • 调节麦克风录音音量

    我们正在尝试调整录音时的音量级别 麦克风似乎非常敏感 会接收到很多静电 我们查看了 setVolumeControlStream 但找不到传入其中来控制麦克风的流 将您的音频源设置为 MIC using MediaRecorder Audi
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来
  • 找到 Android 浏览器中使用的 webkit 版本?

    有没有办法知道某些特定手机上的 Android 浏览器使用的是哪个版本的 webkit 软件 如果有一个您可以浏览以获取该信息的 URL 那就太好了 但任何其他方式也很好 如果你知道 webkit 版本 你就知道 html5 支持多少 至少

随机推荐