ViewPager最后一頁滑動(dòng)后跳轉(zhuǎn)到主頁面實(shí)現(xiàn)方案

轉(zhuǎn)自:https://www.cnblogs.com/renhui/articles/12103367.html

一、實(shí)現(xiàn)思路

主要有是兩個(gè)監(jiān)聽,

一是addOnPageChangeListener();二是setOnTouchListener();

addOnPageChangeListener()主要是為了獲取position(滑動(dòng)到了第幾頁)

setOnTouchListener()主要是判斷在最后一頁中是否向左滑動(dòng)了,然后進(jìn)入主頁。

二、主要功能代碼

1. addOnPageChangeListener();

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? publicvoidonPageScrolled(intposition,floatpositionOffset,int positionOffsetPixels) {

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? publicvoidonPageSelected(int position) {

? ? ? ? ? ? ? ? currentItem = position;//獲取位置,即第幾頁Log.i("Guide","監(jiān)聽改變"+position);

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? publicvoidonPageScrollStateChanged(int state) {

? ? ? ? ? ? }

? ? ? ? });

2. setOnTouchListener();

viewPager.setOnTouchListener(new View.OnTouchListener() {

? ? ? ? ? ? float startX;

? ? ? ? ? ? floatstartY;//沒有用到float endX;

? ? ? ? ? ? floatendY;//沒有用到? ? ? ? ? ? @Override

? ? ? ? ? ? publicboolean onTouch(View v, MotionEvent event) {

? ? ? ? ? ? ? ? switch (event.getAction()){

? ? ? ? ? ? ? ? ? ? case MotionEvent.ACTION_DOWN:

? ? ? ? ? ? ? ? ? ? ? ? startX=event.getX();

? ? ? ? ? ? ? ? ? ? ? ? startY=event.getY();

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case MotionEvent.ACTION_UP:

? ? ? ? ? ? ? ? ? ? ? ? endX=event.getX();

? ? ? ? ? ? ? ? ? ? ? ? endY=event.getY();

? ? ? ? ? ? ? ? ? ? WindowManager windowManager= (WindowManager)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? getApplicationContext().getSystemService(Context.WINDOW_SERVICE);


? ? ? ? ? ? ? ? ? ? ? ? //獲取屏幕的寬度Point size =new Point();

? ? ? ? ? ? ? ? windowManager.getDefaultDisplay().getSize(size);

? ? ? ? ? ? ? ? ? ? ? ? intwidth=size.x;


//首先要確定的是,是否到了最后一頁,然后判斷是否向左滑動(dòng),并且滑動(dòng)距離是否符合,我這里的判斷距離是屏幕寬度的4分之一(這里可以適當(dāng)控制)if(currentItem==(imageViews.size()-1)&&startX-endX>=(width/4)){

? ? ? Log.i(LOG,"進(jìn)入了觸摸");

? ? ? goToMainActivity();//進(jìn)入主頁overridePendingTransition(R.anim.slide_in_right,R.anim.slide_in_left);//這部分代碼是切換Activity時(shí)的動(dòng)畫,看起來就不會(huì)很生硬? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? returnfalse;

? ? ? ? ? ? }

? ? ? ? });

三、完整代碼實(shí)現(xiàn)

GuideActivity:

package com.tc.mobileshop;import android.content.Context;import android.content.Intent;import android.graphics.Point;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Display;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.ImageView;import com.tc.mobileshop.utils.DisplayUtils;import java.util.ArrayList;import java.util.List;publicclassGuideActivityextends AppCompatActivity {

? ? privatestaticfinalString LOG = "GuideActivity";

? ? int touchCount;

? ? int currentItem;

? ? List imageIDList;

? ? List imageViews;

? ? ViewPager viewPager;

? ? @Override

? ? protectedvoid onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_guide);

? ? ? ? //初始化引導(dǎo)數(shù)據(jù)? ? ? ? initGuideData();

? ? ? ? //初始化引導(dǎo)頁? ? ? ? initGuideView();

? ? ? ? //初始化分頁控件? ? ? ? iniView();

? ? }

? ? /**? ? * 初始化引導(dǎo)頁數(shù)據(jù)

? ? */privatevoid initGuideData() {

? ? ? ? imageIDList =new ArrayList();

? ? ? ? imageIDList.add(R.mipmap.apk_img1);

? ? ? ? imageIDList.add(R.mipmap.apk_img2);

? ? ? ? imageIDList.add(R.mipmap.apk_img3);

? ? }

? ? /**? ? * 初始化引導(dǎo)頁

? ? */privatevoid initGuideView() {

? ? ? ? imageViews =newArrayList<>();

? ? ? ? for(inti = 0; i < imageIDList.size(); i++) {

? ? ? ? ? ? imageViews.add(newImageView(this));

? ? ? ? }

? ? }

? ? /**? ? * 初始化分頁控件

? ? */privatevoid iniView() {

? ? ? ? viewPager = (ViewPager) findViewById(R.id.guide_pager);

? ? ? ? viewPager.setAdapter(new GuideAdapter());

? ? ? ? viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? publicvoidonPageScrolled(intposition,floatpositionOffset,int positionOffsetPixels) {

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? publicvoidonPageSelected(int position) {

? ? ? ? ? ? ? ? currentItem = position;

? ? ? ? ? ? ? ? Log.i("Guide","監(jiān)聽改變"+position);

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? publicvoidonPageScrollStateChanged(int state) {

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? viewPager.setOnTouchListener(new View.OnTouchListener() {

? ? ? ? ? ? float startX;

? ? ? ? ? ? float startY;

? ? ? ? ? ? float endX;

? ? ? ? ? ? float endY;

? ? ? ? ? ? @Override

? ? ? ? ? ? publicboolean onTouch(View v, MotionEvent event) {

? ? ? ? ? ? ? ? switch (event.getAction()){

? ? ? ? ? ? ? ? ? ? case MotionEvent.ACTION_DOWN:

? ? ? ? ? ? ? ? ? ? ? ? startX=event.getX();

? ? ? ? ? ? ? ? ? ? ? ? startY=event.getY();

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case MotionEvent.ACTION_UP:

? ? ? ? ? ? ? ? ? ? ? ? endX=event.getX();

? ? ? ? ? ? ? ? ? ? ? ? endY=event.getY();

? ? ? ? ? ? ? ? ? ? ? ? WindowManager windowManager= (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);

? ? ? ? ? ? ? ? ? ? ? ? //獲取屏幕的寬度Point size =new Point();

? ? ? ? ? ? ? ? ? ? ? ? windowManager.getDefaultDisplay().getSize(size);

? ? ? ? ? ? ? ? ? ? ? ? intwidth=size.x;

? ? ? ? ? ? ? ? ? ? ? ? //首先要確定的是,是否到了最后一頁,然后判斷是否向左滑動(dòng),并且滑動(dòng)距離是否符合,我這里的判斷距離是屏幕寬度的4分之一(這里可以適當(dāng)控制)if(currentItem==(imageViews.size()-1)&&startX-endX>0&&startX-endX>=(width/4)){

? ? ? ? ? ? ? ? ? ? ? ? ? ? Log.i(LOG,"進(jìn)入了觸摸");

? ? ? ? ? ? ? ? ? ? ? ? ? ? goToMainActivity();

? ? ? ? ? ? ? ? ? ? ? ? ? ? overridePendingTransition(R.anim.slide_in_right,R.anim.slide_in_left);

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? returnfalse;

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? privatevoid goToMainActivity() {

? ? ? ? Intent intent=newIntent(this,MainActivity.class);

? ? ? ? startActivity(intent);

? ? ? ? finish();

? ? }

? ? /**? ? * Viewpager適配器

? ? */privateclassGuideAdapterextends PagerAdapter {

? ? ? ? @Override

? ? ? ? publicint getCount() {

? ? ? ? ? ? return imageViews.size();

? ? ? ? }

? ? ? ? /**? ? ? ? * 判斷當(dāng)前分頁是不是view

? ? ? ? * 由于ViewPager里面的分頁可以填入Fragment

? ? ? ? *

? ? ? ? * @param view

? ? ? ? * @param object

? ? ? ? * @return*/? ? ? ? @Override

? ? ? ? publicboolean isViewFromObject(View view, Object object) {

? ? ? ? ? ? returnview == object;

? ? ? ? }

? ? ? ? /**? ? ? ? * 清理內(nèi)存

? ? ? ? * 從第一頁滑動(dòng)到第二頁,此時(shí)第一頁的內(nèi)存應(yīng)該釋放

? ? ? ? *

? ? ? ? * @param container

? ? ? ? * @param position

? ? ? ? * @param object

? ? ? ? */? ? ? ? @Override

? ? ? ? publicvoiddestroyItem(ViewGroup container,int position, Object object) {

? ? ? ? ? container.removeView(imageViews.get(position));//釋放滑動(dòng)過后的前一頁? ? ? ? }

? ? ? ? /**? ? ? ? * 得到---->暫時(shí)是沒有用的

? ? ? ? *

? ? ? ? * @param object

? ? ? ? * @return*/? ? ? ? @Override

? ? ? ? publicint getItemPosition(Object object) {

? ? ? ? ? ? returnsuper.getItemPosition(object);

? ? ? ? }

? ? ? ? /**? ? ? ? * 初始化分頁

? ? ? ? *

? ? ? ? * @param container

? ? ? ? * @param position

? ? ? ? * @return*/? ? ? ? @Override

? ? ? ? publicObject instantiateItem(ViewGroup container,int position) {

? ? ? ? ? ? ImageView imageView = imageViews.get(position);

? ? ? ? ? ? imageView.setImageResource(imageIDList.get(position));

? ? ? ? ? ? ViewGroup.LayoutParams viewLayoutParams =new ViewGroup.LayoutParams

? ? ? ? ? ? ? ? ? ? (

? ? ? ? ? ? ? ? ? ? ? ? ? ? DisplayUtils.dip2px(GuideActivity.this, 170),

? ? ? ? ? ? ? ? ? ? ? ? ? ? DisplayUtils.dip2px(GuideActivity.this, 200)

? ? ? ? ? ? ? ? ? ? );

? ? ? ? ? ? container.addView(imageView,viewLayoutParams);//設(shè)置圖片的寬高return imageView;

? ? ? ? }

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容