我有一台有多张卡的CardScrollView。向左和向右刷卡会在卡之间移动。
谷歌眼镜不知道当用户出于显而易见的原因滑动手指时,它是应该滚动到另一张卡,还是滚动到它所在的卡上。它选择滚动到另一张卡。
为了与众不同,我想使用GestureDetector在选定的卡片上制作一个单指滚动卡片和两个手指滚动卡片。看起来很简单,所以我创建了createGestureDetector()方法,并为每个case编写了if语句。
现在我有一个问题……我不知道如何告诉CardScrollView前进或后退一张卡片,我也不知道如何根据手势使ScrollBody滚动。
我查看了所有可用的方法,但没有一种方法对我特别有帮助。有谁知道怎么做吗?
调度方法是做什么的?
编辑:
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;
}我希望这些编辑能有所帮助!
发布于 2014-03-05 16:37:02
我在我的项目中也遇到了类似的问题。为了解决这个问题,我不得不在GestureDetector中处理"onFingerCountChanged“,并在我有两个手指计数时停用CardScrollView。因此,当我使用一个手指时,卡片滚动视图正常,当我使用两个手指时,可以使用gestureDetector在我的卡片中滚动。
你的代码应该看起来像这样:
gestureDetector.setFingerListener(new GestureDetector.FingerListener() {
@Override
public void onFingerCountChanged(int previousCount, int currentCount) {
if(currentCount == 2){
yourCardScrollView.deactivate();
}else{
yourCardScrollView.activate();
}
}
....
}发布于 2014-11-11 11:56:34
编辑:我注意到我的第一个答案是不工作。我还有一个。您可以在您的活动中使用以下代码。
@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
如果它工作了,请回复我。
https://stackoverflow.com/questions/22125781
复制相似问题