Android - Seekbar自定义进度缩放

Android - Seekbar custom progress scaling

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

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

有办法吗?

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

希望我的问题够清楚了。

提前致谢!

在您 activity 的 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));
}

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

double toMove = (x-mySeekbarX)*ScalingFactor;

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

希望我能帮到你 :D