首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用CardScrollView和ScrollView

同时使用CardScrollView和ScrollView
EN

Stack Overflow用户
提问于 2014-03-02 17:11:53
回答 2查看 2.3K关注 0票数 4

我有一台有多张卡的CardScrollView。向左和向右刷卡会在卡之间移动。

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

为了与众不同,我想使用GestureDetector在选定的卡片上制作一个单指滚动卡片和两个手指滚动卡片。看起来很简单,所以我创建了createGestureDetector()方法,并为每个case编写了if语句。

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

我查看了所有可用的方法,但没有一种方法对我特别有帮助。有谁知道怎么做吗?

调度方法是做什么的?

编辑:

代码语言:javascript
复制
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是:

代码语言:javascript
复制
<?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填充:

代码语言:javascript
复制
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;
    }

我希望这些编辑能有所帮助!

EN

回答 2

Stack Overflow用户

发布于 2014-03-05 16:37:02

我在我的项目中也遇到了类似的问题。为了解决这个问题,我不得不在GestureDetector中处理"onFingerCountChanged“,并在我有两个手指计数时停用CardScrollView。因此,当我使用一个手指时,卡片滚动视图正常,当我使用两个手指时,可以使用gestureDetector在我的卡片中滚动。

你的代码应该看起来像这样:

代码语言:javascript
复制
    gestureDetector.setFingerListener(new GestureDetector.FingerListener() {
        @Override
        public void onFingerCountChanged(int previousCount, int currentCount) {
            if(currentCount == 2){
                yourCardScrollView.deactivate();
            }else{

                yourCardScrollView.activate();
            }

        }
        ....
    }
票数 3
EN

Stack Overflow用户

发布于 2014-11-11 11:56:34

编辑:我注意到我的第一个答案是不工作。我还有一个。您可以在您的活动中使用以下代码。

代码语言:javascript
复制
@Override
public boolean dispatchGenericMotionEvent(MotionEvent ev) {
    if (ev.getPointerCount() > 1) {
        return true;
    }
    return super.dispatchGenericMotionEvent(ev);
}

当dispatchGenericMotionEvent激活时,检测指针是否大于1(多点触控),返回true并使用它。

我测试过了,但还是有bug。https://code.google.com/p/google-glass-api/issues/detail?id=632

如果它工作了,请回复我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22125781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档