其他分享
首页 > 其他分享> > android-同时使用CardScrollView和ScrollView

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