gpt4 book ai didi

三星设备上的android Horizo​​ntalScrollView fling

转载 作者:行者123 更新时间:2023-11-29 01:59:03 26 4
gpt4 key购买 nike

我有一个使用 Horizo​​ntalScrollView 和 horizo​​ntal-LinearLayout 的简单布局,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="100dp"
android:scrollbars="horizontal"
android:fadingEdge="none">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">

<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sed velit sed nisl pharetra consequat"/>
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sed velit sed nisl pharetra consequat"/>
<TextView ... (same text view repeated several times) />

</LinearLayout>

</HorizontalScrollView>

</RelativeLayout>

当我在模拟器上对此进行测试时,水平 throw 效果很好。但是在 Samsung Galaxy S2 上进行测试时,fling 的行为很奇怪:

当手指移动to-side-and-up时, ScrollView 开始正常滑动,但在停止之前,它反弹并向后移动,尽管它NOT到了尽头。就像 ScrollView 在任何滚动级别上弹跳一样。

如果我只是滚动(移动手指 to-side-stop-and-up),滚动就完成了。

有人遇到过吗?三星实现中是否存在任何错误?

关于如何解决这个问题有什么想法吗?

我的应用程序针对 android 2.2。Galaxy S2 拥有官方三星 android 4.0.3。

提前致谢!

最佳答案

经过大量测试后,我得出结论,这是三星固件 (Galaxy S2 4.0.3) 上 Horizo​​ntalScrollView 上的错误。

似乎这个 throw 手势是朝着相反的方向做出的:例如,如果我按下并向左移动,然后松开屏幕,则 throw 效果(继续移动并减速)将完成...正确!

所以我的解决方案是继承 Horizo​​ntalScrollView,并添加一个补丁以确保如果向右滚动,则向右滑动,反之亦然。

public class PatchedHorizontalScrollView extends HorizontalScrollView {
public PatchedHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public PatchedHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PatchedHorizontalScrollView(Context context) {
super(context);
}

// store most recent scroll X positions
int olderScrollX = 0;
int lastScrollX = 0;

@Override
public boolean onTouchEvent(MotionEvent ev) {
// keep track of most recent scroll positions
olderScrollX = lastScrollX;
lastScrollX = getScrollX();

return super.onTouchEvent(ev);
}

@Override
public void fling(int velocityX) {
// ensure velocityX has the right sign
if (lastScrollX > olderScrollX) {
// to the right: velocity must be positive
if (velocityX < 0) {
velocityX = -velocityX;
}
} else if (lastScrollX < olderScrollX) {
// to the left: velocity must be negative
if (velocityX > 0) {
velocityX = -velocityX;
}
}

super.fling(velocityX);
}
}

关于三星设备上的android Horizo​​ntalScrollView fling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com