android-同时使用CardScrollView和ScrollView
作者:互联网
我有一个带有多个卡的CardScrollView.在卡之间左右滑动.
有些卡上有很多内容.我使用了ScrollView,以便用户可以滚动浏览卡片以查看内容.
当用户出于明显的原因滑动手指时,Glass不知道是滚动到另一张卡片还是在其所在的卡片上滚动.它选择滚动到其他卡.
为了区别起见,我想使用GestureDetector来使一个手指滚动滚动卡,然后使两个手指滚动滚动所选的卡.似乎很容易,所以我制作了createGestureDetector()方法并为每种情况放置了if语句.
现在我有一个问题…我不知道如何告诉CardScrollView前进或后退卡,而且我不知道如何根据手势使ScrollBody滚动.
我浏览了所有可用的方法,没有发现对我有特别帮助的.有谁知道如何做到这一点?
额外的问题:我看到了很多“调度”命令,例如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;
}
和我的看法的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();
}
}
....
}
标签:scrollview,google-gdk,android,google-glass,cardscrollview 来源: https://codeday.me/bug/20191122/2056543.html