Viewpager调用的意图,当用户由右至左刷卡 [英] Viewpager call intent when user swipes from right to left
问题描述
我用 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屋!