0

ユーザーへの紹介を示すために使用viewpagerしています.2つの画面があり、両方の画面が終了したらintent. 現在、私は実装viewpagerして合格しましたintent

これが私がこれまでに行ったことです:

ソースコードを編集しました:

IntroActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
    final ImagePagerAdapter adapter = new ImagePagerAdapter();
    viewPager.setAdapter(adapter);

    OnPageChangeListener mListener = new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            selectedIndex = arg0;
            System.out.println("Selecte Page: " + selectedIndex);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
            if (mPageEnd && arg0 == selectedIndex) {
                Log.d(getClass().getName(), "Okay");
                mPageEnd = false;// To avoid multiple calls.
            } else {
                mPageEnd = false;
            }
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            if (selectedIndex == adapter.getCount() - 1) {
                mPageEnd = true;
            }
        }
    };
    viewPager.setOnPageChangeListener(mListener);

}

private class ImagePagerAdapter extends PagerAdapter {
    private int[] mImages = new int[] { R.drawable.libin1,
            R.drawable.libin2 };

    @Override
    public int getCount() {
        return mImages.length;

    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((ImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Context context = MainActivity.this;
        ImageView imageView = new ImageView(context);
        int padding = context.getResources().getDimensionPixelSize(
                R.dimen.padding_medium);
        imageView.setPadding(padding, padding, padding, padding);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setImageResource(mImages[position]);
        ((ViewPager) container).addView(imageView, 0);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((ImageView) object);
    }
}

これらを介して を実装できますが、ご覧のとおり、ユーザーが 2 番目の画面にいるときにviewpagerインテントを呼び出しました。onTouchListener

touchListener()私の問題は、ユーザーが画面に触れるとすぐにインテントが呼び出されるため、必要に応じてユーザーが最初の画面を再度表示できないことです。

アクションに使用GestureListenerしてみましflingたが、それも役に立ちません。

どうすればこの問題を克服できますか?

あらゆる種類の助けをいただければ幸いです。

4

2 に答える 2

4

まず第一に、論理を再考することをお勧めします。別のページに移動し、前のページにスワイプできるというアクションはActivity、少し矛盾しているように見えます。ユーザーが最後のページに到達したときに通知が表示されます (この紹介を「閉じる」ように促します)。これはより良い選択だと思います。 .

とにかくやりたいことができた。で を設定しOnPageChangeListenerて、ViewPager対話をリッスンします。

        @Override
        public void onPageScrollStateChanged(int state) {
            mCurrentState = state;
            // if we are at the second page and the user touched the
            // ViewPager post a Runnable with a decent time to schedule our
            // Intent
            if (mViewPager.getCurrentItem() == 1) {
                if (state == ViewPager.SCROLL_STATE_DRAGGING) {
                    mHandler.postDelayed(mRun, INTERVAL);
                }
            }
        }

あなたは必要になるでしょう:

private ViewPager mViewPager;
private int mCurrentState = -1;
private static int INTERVAL = ViewConfiguration.getLongPressTimeout();
private Handler mHandler = new Handler();
private Runnable mRun = new Runnable() {

    @Override
    public void run() {
        // we got the Runnable to be executed. If we are on the second page
        // and the user let go of the ViewPager in our time frame then start
        // the Activity(also cancel the dozen Runnables that were posted)
        if (mCurrentState == ViewPager.SCROLL_STATE_IDLE
                && mViewPager.getCurrentItem() == 1) {
            mHandler.removeCallbacks(mRun);// or always set it to run
            Intent i = new Intent(PagerTextTouch.this, MainActivity.class);
            startActivity(i);
        }
    }
};
于 2013-04-22T09:07:48.627 に答える
0

ビューページの位置を取得します

private static class PageListener extends SimpleOnPageChangeListener{
    public void onPageSelected(int position) {
        Log.i(TAG, "page selected " + position);
           currentPage = position;
          } 


}

pageListner を呼び出す

pageListener = new PageListener(); ViewPager.setOnPageChangeListener(pageListener);

これで、ビューの位置を取得できます

于 2014-03-28T04:31:37.580 に答える