视图导航使用滑动手势android

时间:2015-11-17 13:02:55

标签: java android textview swipe viewflipper

根据json ArrayList尺寸创建TextView' s。

使用课程Display,使每个TextView高度和宽度覆盖整个屏幕。

MOTTO

  

屏幕上只能显示1个TextView。通过刷它   应该移动到下一个视图,它将再次占据整个屏幕。

     

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

使用GestureDetector.SimpleOnGestureListener

启用了滑动功能

到目前为止,我已尝试使用ViewFlipperTextView数组启用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();
                }
            });
        }

错误:

  1. 使用ViewFlipper

      

    E / MessageQueue-JNI:MessageQueue回调中的异常:handleReceiveCallback

  2. 数组:

      

    E / InputEventReceiver:异常调度输入事件。 - java.lang.ArrayIndexOutOfBoundsException

  3. 修改

    我发现此Questionios有关。正在搜索android

      

    我正在尝试开发类似于SimplEye的应用    将由视障人士使用。

    为此,我需要控制屏幕上的滑动,这样才能通过滑动帮助处理整个应用程序。

    ViewPager,ViewFlipper,SimpleOnGestureListener与要求不匹配。

    请建议应该使用什么技术。 谢谢

2 个答案:

答案 0 :(得分:2)

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

这是 MOTTO 的替代方案,而不是您问题的解决方案

<强> activity_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>

<强> ViewPagerActivity

    public class ViewPagerActivity extends Activity {
                String text[] = {"A", "B",
                        "C", "D",
                        "E", "F",
                        "G", "H"};

                @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    MyPagerAdapter adapter = new MyPagerAdapter(this, text);
                    ViewPager myPager = (ViewPager) findViewById(R.id.viewpager);
                    myPager.setAdapter(adapter);
                    myPager.setCurrentItem(0);
//set Page Change Listner. to get callback on page changed or swiped
    myPager .setOnPageChangeListener(new OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    Log.e("Page Changed ", " YES ");
                    /// here you can check & perform on changed
                    Log.e("Current TextView Text ", text[position]);
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

                }
            }

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;
        }
    }

答案 1 :(得分:0)

使用ViewPager滑动视图(仅通过滑动手势;如果您需要在时间内滑动,则ViewFlipper是更好的方法)。让您的TR SousTotal / ViewPager同时layout_width(在xml布局中定义layout_height而不是通过代码)。另外,您也可以match_parent ViewPager / TextView layout_width,因此根本不需要layout_height课程。

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

  1. 尝试不使用任何自己处理手势(点击)的小部件(按钮,复选框等)。仅使用不可解决的视图,并在match_parent内部实施Display方法,在这种情况下,该方法将接收所有触摸事件。在该方法中,您可以添加任何所需的手势处理。
  2. 您可以创建自己的onTouchEvent实施并覆盖Activity / ViewGroup种方法,并手动执行任何手势处理。
  3. 在这两种情况下,您都需要自己创建所有手势检测逻辑。

    这些链接可能会有所帮助

    1. Creating a simple Gesture Application in Android
    2. How to add our own gestures in android?
    3. 检测常见手势
    4. 从未这样做,但第一个链接似乎是最有用的。它表示您可以首先创建某种姿势描述,然后手势API可以检查执行的任何手势以匹配该描述。