Навигация по представлениям с помощью жеста Swipe android

На основе JSON ArrayList размер я создаю TextView"S.

Используя класс Display сделал каждый 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();
                }
            });
        }

Ошибки:

  1. При использовании ViewFlipper

    E/MessageQueue-JNI﹕ Исключение в обратном вызове MessageQueue: handleReceiveCallback

  2. Массив:

    E / InputEventReceiver ﹕ Исключительная диспетчеризация входного события. - java.lang.ArrayIndexOutOfBoundsException

РЕДАКТИРОВАТЬ

Я нашел этот вопрос, связанный с ios, Искать то же самое для android

Я пытаюсь разработать приложение, похожее на SimplEye, которое будет использоваться людьми с ограниченными возможностями.

Для этого мне нужно контролировать свайпы на экране, чтобы все приложение можно было обрабатывать только с помощью свайпов.

ViewPager, ViewFlipper, SimpleOnGestureListener не соответствуют требованию.

Пожалуйста, предложите, какую методику следует использовать. Спасибо

2 ответа

Решение

Основывается на вопросе, что я могу предложить, это использовать ViewPager

которая является альтернативой для вашего девиза, а не решения вашей проблемы

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

Используйте ViewPager для скольжения видов (только жестом смахивания; если вам нужно смахивать во время, тогда ViewFlipper лучше подходит). Сделай свой ViewPagerlayout_width/layout_height оба match_parent (определить ViewPager в формате XML не через код). Также сделайте свой TextViewlayout_width/layout_heightmatch_parent тоже, таким образом, вам не нужно Display класс вообще.

РЕДАКТИРОВАТЬ. Согласно последнему изданию, TS должен обрабатывать жесты навигации по всему приложению. Я предлагаю следующее:

  1. старайтесь не использовать какие-либо виджеты, которые обрабатывают жесты (щелчок) сами по себе (кнопка, флажок и т. д.). Используйте только неуправляемые виды и реализуйте onTouchEvent метод внутри вашего Activity который получит все сенсорные события в этом случае. В этом методе вы можете добавить любую обработку жестов, какую захотите.
  2. Вы можете создать свой собственный ViewGroup реализация и переопределить там onInterceptTouchEvent/onTouchEvent методы и выполнять там любые жесты обработки вручную.

В обоих случаях вам нужно создать всю логику обнаружения жестов самостоятельно.

Эти ссылки могут быть полезны

  1. Создание простого приложения для жестов в Android
  2. Как добавить наши собственные жесты в Android?
  3. Обнаружение общих жестов

Никогда этого не делал, но первая ссылка кажется наиболее полезной. В нем говорится, что вы можете сначала создать какое-то описание жеста, а затем API-интерфейс жеста может проверить любой выполненный жест на соответствие этому описанию.

Другие вопросы по тегам