【问题标题】:Android - Seekbar custom progress scalingAndroid - Seekbar 自定义进度缩放
【发布时间】:2016-10-22 13:53:10
【问题描述】:

我正在尝试修改我的搜索栏行为,使其更类似于 iOS 系统,在 iOS 系统中,只要你在 y 坐标中从搜索栏矩形开始,它就会减慢你的搜索进度。当您返回搜索栏时,它会将您的进度缩放更新到您所在的位置,当您触摸搜索栏时,您的搜索栏的 x-swipe / 进度条的比例为 1/1。

我想实现这样的目标:当你在搜索栏上说 50 像素(在 y 方向上)时,我的缩放因子应该是 3/1:当你在 x 方向上移动 3 像素时,你的搜索栏显然,应该根据您的 x 轴符号移动 1 个像素。总而言之,像 ipod 音乐跟踪搜索栏或视频播放器(我认为适用于 Android 的 MX 播放器有我正在寻找的东西)。

有没有办法做到这一点?

我尝试的是覆盖 seekbar.setOnTouchListener,但是从这里我不知道我可以做什么来模拟这样的事情。我认为这与 seekbar.setOnSeekBarChangeListener 相关......我如何覆盖手势检测和进度条计算之间的“链接”,我可以在我的 setOnSeekBarChangeListener.OnProgressChanged 方法中找到相同的进度条?是否有类似 seekbar.setScalingProgressFactor 之类的方法根据 y 坐标沿 x 轴施加 3/1 像素的比例?

我希望我的问题足够清楚。

提前致谢!

【问题讨论】:

    标签: android progress-bar custom-controls seekbar


    【解决方案1】:

    在您的活动的 OnTouch 中,使用:

    int x = event.getX(), y = event.getY();
    

    然后,使用以下命令检查 y 坐标有多远:

    int distance = mySeekbarY - y;
    if (distance == 0) {
        double ScalingFactor = 1;
    else {
        double ScalingFactor = 50/(3*Math.abs(distance));
    }
    

    当点击距离为 50 像素时,距离变为 50。将 50 代入公式,我们得到 50/(3*50) = 1/3,如您所愿。我们需要 if-else 语句来处理距离为 0 的情况。将 0 代入公式会得到 50/0,这会给您带来错误。现在做:

    double toMove = (x-mySeekbarX)*ScalingFactor;
    

    然后将 toMove 添加到搜索栏的 X 坐标。 :D

    希望我能帮上忙:D

    【讨论】:

    • 是的,非常感谢!但是你说“seekbar的x坐标”是什么意思?你建议使用“seekbar.setProgress(toMove)”,对吗?对不起,愚蠢的问题...... :)
    • @pippo 不完全是,获取一个变量来跟踪 seekbar 的当前进度。然后,将 toMove 添加到它,然后将其设置为 Progress。如果您需要帮助,请务必询问!附:如果您认为答案令人满意,请将其标记为已接受并投票否决? ;D
    • 非常感谢您的好意!你在我的工作中帮助了我很多!所以我找到了这个解决方案:正如你所建议的,我覆盖了 setOnTouchListener 并在单击搜索栏视图时跟踪我的位置。缩放因子的东西就像你写的一样,但我插入了一个小技巧来让它更流畅:我将 event.getX() 划分为 (seekbar.getWidth() / seekbar.getMax() ) 以使我的 x-轴运动更类似于我的搜索栏运动;) 然后 setProgress(getProgress() + toMove),都在我的搜索栏 onTouchListener 中。现在一切顺利!非常感谢!! :)
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多