Java 使用滑动手势查看导航

Java 使用滑动手势查看导航,java,android,textview,swipe,viewflipper,Java,Android,Textview,Swipe,Viewflipper,基于jsonArrayListsize,我正在创建TextView 通过使用类显示,使每个文本视图的高度和宽度覆盖整个屏幕 座右铭 屏幕上只能看到1TextView。通过刷卡 应移至下一个视图,该视图将再次占据整个屏幕 向下滑动和向上滑动将移动屏幕,即视图。。。向左滑动和向右滑动应该执行一些其他任务,例如更改活动 通过使用GestureDetector.SimpleOnGestureListener启用滑动 到目前为止,我已尝试使用ViewFlipper,TextView数组在TextView之

基于json
ArrayList
size,我正在创建
TextView

通过使用类
显示
,使每个
文本视图
的高度和宽度覆盖整个屏幕

座右铭

屏幕上只能看到1
TextView
。通过刷卡 应移至下一个视图,该视图将再次占据整个屏幕


向下滑动和向上滑动将移动屏幕,即视图。。。向左滑动和向右滑动应该执行一些其他任务,例如更改活动

通过使用
GestureDetector.SimpleOnGestureListener启用滑动

到目前为止,我已尝试使用
ViewFlipper
TextView
数组在
TextView
之间切换,但失败:(

代码段:

        for(int i=0;i<name.size();i++)
        {
            text = new TextView(MainActivity.this);
            text.setText(name.get(i));
            text.setId(i);
            text.setTextColor(Color.parseColor("#000000")); 
            text.setLayoutParams(new LinearLayout.LayoutParams(realWidth, realHeight));
            text.setGravity(Gravity.CENTER);
            text.setTextSize(40);
            text.setClickable(true);
            vf.addView(text);

           /* 
           //I've tried the following code while using TextView array
            myTextViews[i] = text;
            myTextViews[i].setId(i);
            myTextViews[i].setTextColor(Color.BLACK);
            myTextViews[i].setText(name.get(i));
            myTextViews[i].setGravity(Gravity.CENTER);
            myTextViews[i].setTextSize(40);
            myTextViews[i].setLayoutParams(new LinearLayout.LayoutParams(realWidth, realHeight));
            myTextViews[i].onWindowFocusChanged(false);
            LL.addView(myTextViews[i]);
*/

            View lines = new View(getApplicationContext());
            lines.setBackgroundColor(Color.parseColor("#000000"));
            lines.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
            vf.addView(lines);

            final int finalI = i;


            text.setOnTouchListener(new MainActivity()
            {
                @Override
                public void onSwipeLeft()
                { 
                    if (vf.getDisplayedChild() == 0)
                        Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
                    else
                        vf.showNext();
                }

                @Override
                public void onSwipeRight()
                {
                    if (vf.getDisplayedChild() == 0)
                        Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
                    else
                        vf.showPrevious();
                }
            });
        }
for(int i=0;i用于滑动视图(仅通过滑动手势;如果您需要在时间内滑动,则ViewFlipper是更好的方法)。使您的
ViewPager
layout\u width
/
layout\u height
属性都
匹配父项
(在xml布局中定义
ViewPager
,而不是通过代码)。还可以使您的
文本视图
布局宽度
/
布局高度
也与父级
匹配,这样您就根本不需要
显示

编辑。根据最新版本,TS需要在整个应用程序中处理手势导航。我建议如下:

  • 尽量不要使用任何自行处理手势(单击)的小部件(按钮、复选框等)。仅使用不可理解的视图,并在
    活动
    中实现
    onTouchEvent
    方法,该方法将接收这种情况下的所有触摸事件。在该方法中,您可以添加任何需要的手势处理
  • 您可以创建自己的
    视图组
    实现,并在那里覆盖
    onInterceptTouchEvent
    /
    onTouchEvent
    方法,并在那里手动执行任何手势处理
  • 在这两种情况下,您都需要自己创建所有手势检测逻辑

    这些链接可能会有所帮助

  • 检测常见手势

  • 从来没有这样做过,但第一个链接似乎是最有用的。它说,您可以首先创建某种手势描述,然后手势API可以检查执行的任何手势是否与该描述匹配。

    基于这个问题,我可以建议使用

    哪一个是你的座右铭的替代方案,而不是你问题的解决方案

    活动\u main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </LinearLayout>
    
    MyPagerAdapter

    public class MyPagerAdapter extends PagerAdapter {
    
            Activity activity;
            int txtarray[];
    
            public MyPagerAdapter(Activity act, int[] imgArra) {
                txtarray = imgArra;
                activity = act;
            }
    
            public int getCount() {
                return txtarray.length;
            }
    
            public Object instantiateItem(View collection, int position) {
                TextView view = new TextView(activity);
                view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.FILL_PARENT));
                view.setText(txtarray[position]);
                ((ViewPager) collection).addView(view, 0);
                return view;
            }
    
            @Override
            public void destroyItem(View arg0, int arg1, Object arg2) {
                ((ViewPager) arg0).removeView((View) arg2);
            }
    
            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == ((View) arg1);
            }
    
            @Override
            public Parcelable saveState() {
                return null;
            }
        }
    

    是否有任何错误或视图不可见?编辑问题,添加errors@Prabs请检查viewpager相关向下投票者的答案。如果可以,请给出解决方案。如果我制作
    TextView
    layout\u width/layout\u height
    match\u parent
    则只有一个
    TextView
    可见。我没有得到多个viEWS刚刚检查了文档。我想这是一个大过程。你确定它会满足要求吗?我应该试试吗..我想是的..使用
    viewpager.setCurrentItem(int-index);
    我可以访问所需的视图..rt???@Prabs不,您不能以这种方式访问视图。setCurrentItem显示您需要的项目。项目的设置由适配器完成。ViewPager的优点是它以最佳方式实现了滑动手势。缺点是它不能通过计时器自动滑动,也不能充当旋转木马(这实际上可以通过变通方法实现)。编辑了问题,请您在@LingViston检查一次,但我已完成手势。我可以使用
    手势检测器跟踪执行的滑动。SimpleOnGestureListener
    。我想在跟踪上下滑动时转到下一个视图,即在
    @覆盖公共空白onSwipeRight(){//应该在这里显示什么以转到下一个视图}
    。我被卡住了。非常感谢你提供的代码。我明天会测试它,然后回复你。再次感谢你的时间。我已经实现了ViewPager,并将其从水平滚动改为垂直滚动。但是我们可以在向左和向右滑动上执行其他操作吗。我们可以覆盖这些方法吗?我没有发现类似的情况@Prabs您可以将监听器添加到viewpager,以便在页面更改时获得回调(如从左向右或从右向左滑动后,它将在“onPageSelected”上提供常见回调)。有关更多详细信息,您可以检查,对于垂直滚动,向下滑动和向上滑动将移动屏幕,即视图…向左滑动和向右滑动应会更改活动
    public class MyPagerAdapter extends PagerAdapter {
    
            Activity activity;
            int txtarray[];
    
            public MyPagerAdapter(Activity act, int[] imgArra) {
                txtarray = imgArra;
                activity = act;
            }
    
            public int getCount() {
                return txtarray.length;
            }
    
            public Object instantiateItem(View collection, int position) {
                TextView view = new TextView(activity);
                view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                        LayoutParams.FILL_PARENT));
                view.setText(txtarray[position]);
                ((ViewPager) collection).addView(view, 0);
                return view;
            }
    
            @Override
            public void destroyItem(View arg0, int arg1, Object arg2) {
                ((ViewPager) arg0).removeView((View) arg2);
            }
    
            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == ((View) arg1);
            }
    
            @Override
            public Parcelable saveState() {
                return null;
            }
        }