簡體   English   中英

使用滑動手勢Android進行視圖導航

[英]Views Navigation Using Swipe Gesture android

基於json ArrayList大小,我正在創建TextView

通過使用Display類,使每個TextView高度和寬度都覆蓋整個屏幕。

座右銘

屏幕上僅應顯示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

編輯

我發現這個問題ios有關。 搜索相同的android

我正在嘗試開發類似於SimplEye的應用程序,該應用程序將被視障人士使用。

為此,我需要控制屏幕上的滑動,以便只能通過滑動來處理整個應用程序。

ViewPager,ViewFlipper,SimpleOnGestureListener不符合要求。

請建議應使用哪種技術。 謝謝

基於這個問題,我可以建議使用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;
        }
    }

使用ViewPager滑動視圖(僅通過滑動手勢即可;如果需要在時間上滑動,則ViewFlipper是更好的方法)。 使您的ViewPager layout_width / layout_height ViewPager都為match_parent (不通過代碼在xml布局中定義ViewPager )。 另外,也使TextView layout_width / layout_height match_parent因此您根本不需要Display類。

編輯。 根據最新版本,TS需要處理整個應用程序中的手勢導航。 我建議以下內容:

  1. 盡量不要使用任何單獨處理手勢(單擊)(按鈕,復選框等)的小部件。 僅使用不可交互的視圖,並在Activity實現onTouchEvent方法,在這種情況下,它將接收所有觸摸事件。 在該方法中,您可以添加所需的任何手勢處理。
  2. 您可以創建自己的ViewGroup實現,並在那里覆蓋onInterceptTouchEvent / onTouchEvent方法,並在那里手動執行任何手勢處理。

在這兩種情況下,您都需要自己創建所有手勢檢測邏輯。

這些鏈接可能會有所幫助

  1. 在Android中創建一個簡單的Gesture應用程序
  2. 如何在android中添加自己的手勢?
  3. 檢測常見手勢

從來沒有,但是第一個鏈接似乎是最有用的。 它說您可以首先創建某種手勢描述,然后手勢API可以檢查所執行的任何手勢以匹配該描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM