Viewpager调用的意图,当用户由右至左刷卡 [英] Viewpager call intent when user swipes from right to left

查看:211
本文介绍了Viewpager调用的意图,当用户由右至左刷卡的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用 viewpager 用于显示一些介绍给用户,有两个屏幕,当这两个屏幕完成我必须通过意图。现在,我已实施 viewpager 并通过了意图

I'm using viewpager for showing some introduction to the user, there are two screens, when both the screen are finished I have to pass the intent. Right now, I have implemented viewpager and passed the intent.

这是我迄今所做的:

编辑我的源$ C ​​$ C:

Edited my source code:

IntroActivity.java

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

通过这些我能落实 viewpager ,但你可以看到,我已呼吁意图 onTouchListener 当用户第二个屏幕上。

Through these I'm able to implement the viewpager, but as you can see that I have called intent on onTouchListener when the user is on second screen.

我的问题是,用户无法再看到的第一个画面,如果他想,因为 touchListener(),一旦用户触摸屏幕的意图之称。

My problem is that user can't see the first screen again if he wants to, because of the touchListener(), as soon as the user touches the screen the intent is called.

我一直在使用 GestureListener 一扔操作尝试过,但也没有我的帮助。

I have tried using GestureListener for fling action, but that is also not helping me.

我怎样才能解决这个问题?

How can I overcome this problem?

任何形式的帮助将是AP preciated。

Any kind of help will be appreciated.

推荐答案

所有我建议你重新考虑你的逻辑第一。要去另一个活动,也能刷卡的previous页的行动似乎有点矛盾,psented给用户的通知$ P $当他最后一页(邀请他为关闭的这个介绍),我认为这是一个更好的选择。

First of all I advise you rethink your logic. The actions of going to another Activity and also being able to swipe to the previous page seems a bit contradictory, a notification presented to the user when he gets to the last page(inviting him to "close" this introduction) I think it's a better choice.

反正你可以做你想做的。设置 OnPageChangeListener ViewPager 监听交互:

Anyway you could do what you want. Set a OnPageChangeListener on the ViewPager to listen for interactions:

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

这篇关于Viewpager调用的意图,当用户由右至左刷卡的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆