gpt4 book ai didi

android - 同时使用 CardScrollView 和 ScrollView

转载 作者:太空狗 更新时间:2023-10-29 12:43:17 25 4
gpt4 key购买 nike

我有一个包含多张卡片的 CardScrollView。在卡片之间左右滑动。

有些卡片上有很多内容。我使用了 ScrollView,因此用户可以滚动卡片以查看内容。

出于显而易见的原因,当用户滑动手指时,Glass 不知道它是应该滚动到另一张卡片还是在它所在的卡片上滚动。它选择滚动到另一张卡片。

为了区分,我想使用 GestureDetector 在所选卡片上制作单指滚动滚动卡片和两指滚动滚动卡片。看起来很简单,所以我制作了 createGestureDetector() 方法并为每种情况放置了 if 语句。

现在我有一个问题......我不知道如何告诉 CardScrollView 前进或后退卡片,我不知道如何根据手势使 ScrollBody 滚动。

我查看了所有可用的方法,没有发现对我特别有用的方法。有谁知道如何做到这一点?

奖励问题:我看到了很多"dispatch"命令,比如 dispatchGenericMotionEvent。调度方法有什么作用?

编辑:

根据 Jean Vacca 的建议,这是我的代码:

private GestureDetector createGestureDetector(Context context) {
GestureDetector gestureDetector = new GestureDetector(context);

gestureDetector.setFingerListener(new GestureDetector.FingerListener() {
@Override
public void onFingerCountChanged(int previousCount, int currentCount) {
if(currentCount == 2){
mCardScrollView.deactivate();
}else{

mCardScrollView.activate();
}
}
});
return gestureDetector;
}

我的 View 的 xml 是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ScrollView
android:id="@+id/scrollBody"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="false">

<LinearLayout
android:id="@+id/scrollLinearLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</ScrollView>

</RelativeLayout>

在位于 CardScrollAdapter 中的这段代码中填充了 TextViews:

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
int nextID = 3;

if (convertView == null) {
convertView = View.inflate(context, R.layout.my_card, null);
holder = new ViewHolder();

MyClass mine = mMyList.get(position);

LinearLayout ll = (LinearLayout)convertView.findViewById(R.id.scrollLinearLayout);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

holder.name = new TextView(this.context);
holder.name.setId(nextID);
nextID++;
holder.name.setTextSize(50);
holder.name.setText(mine.getName());
holder.name.setLayoutParams(lp);
holder.name.setGravity(Gravity.CENTER);
ll.addView(holder.name);

holder.infoTextViews = new ArrayList<TextView>(mine.getInfo().size());
for(int i = 0; i < mine.getInfo().size(); i++)
{
holder.infoTextViews.add(new TextView(this.context));
TextView tv = holder.infoTextViews.get(i);
tv.setId(nextID);
nextID++;
tv.setTextSize(24);
tv.setText(mine.getInfo().get(i));
tv.setLayoutParams(lp);
tv.setGravity(Gravity.CENTER);
ll.addView(tv);
}
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}

return convertView;
}

希望这些修改对您有所帮助!

最佳答案

我在我的项目中遇到了类似的问题。要解决它,我必须处理 GestureDetector 中的“onFingerCountChanged”,并在我有 2 个手指数时停用 CardScrollView。因此,当我使用一根手指时,cardscrollview 会正常滚动,而当我使用两根手指时,可以使用 gestureDetector 在我的卡片中滚动。

你的代码应该是这样的:

    gestureDetector.setFingerListener(new GestureDetector.FingerListener() {
@Override
public void onFingerCountChanged(int previousCount, int currentCount) {
if(currentCount == 2){
yourCardScrollView.deactivate();
}else{

yourCardScrollView.activate();
}

}
....
}

关于android - 同时使用 CardScrollView 和 ScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22125781/

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