android最后一页按钮变灰色打不开,Android viewpager在最后一页滑动之后跳转到主页面的实例代码...

先给大家说下实现思路

主要有是两个监听:

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

addOnPageChangeListener()主要是为了获取position(滑动到了第几页)

setOnTouchListener()主要是判断在最后一页中是否向左滑动了,然后进入主页

在没给大家分享代码之前,先给大家展示下效果图:

主要功能代码

addOnPageChangeListener();

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

currentItem = position;//获取位置,即第几页

Log.i("Guide","监听改变"+position);

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

setOnTouchListener();

viewPager.setOnTouchListener(new View.OnTouchListener() {

float startX;

float startY;//没有用到

float endX;

float endY;//没有用到

@Override

public boolean 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);

int width=size.x;

//首先要确定的是,是否到了最后一页,然后判断是否向左滑动,并且滑动距离是否符合,我这里的判断距离是屏幕宽度的4分之一(这里可以适当控制)

if(currentItem==(imageViews.size()-1)&&startX-endX>=(width/4)){

Log.i(LOG,"进入了触摸");

goToMainActivity();//进入主页

overridePendingTransition(R.anim.slide_in_right,R.anim.slide_in_left);//这部分代码是切换Activity时的动画,看起来就不会很生硬

}

break;

}

return false;

}

});

以下是全部代码

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;

public class GuideActivity extends AppCompatActivity {

private static final String LOG = "GuideActivity";

int touchCount;

int currentItem;

List imageIDList;

List imageViews;

ViewPager viewPager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_guide);

//初始化引导数据

initGuideData();

//初始化引导页

initGuideView();

//初始化分页控件

iniView();

}

/**

* 初始化引导页数据

*/

private void initGuideData() {

imageIDList = new ArrayList();

imageIDList.add(R.mipmap.apk_img1);

imageIDList.add(R.mipmap.apk_img2);

imageIDList.add(R.mipmap.apk_img3);

}

/**

* 初始化引导页

*/

private void initGuideView() {

imageViews = new ArrayList<>();

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

imageViews.add(new ImageView(this));

}

}

/**

* 初始化分页控件

*/

private void iniView() {

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

viewPager.setAdapter(new GuideAdapter());

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

currentItem = position;

Log.i("Guide","监听改变"+position);

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

viewPager.setOnTouchListener(new View.OnTouchListener() {

float startX;

float startY;

float endX;

float endY;

@Override

public boolean 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);

int width=size.x;

//首先要确定的是,是否到了最后一页,然后判断是否向左滑动,并且滑动距离是否符合,我这里的判断距离是屏幕宽度的4分之一(这里可以适当控制)

if(currentItem==(imageViews.size()-1)&&startX-endX>0&&startX-endX>=(width/4)){

Log.i(LOG,"进入了触摸");

goToMainActivity();

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

}

break;

}

return false;

}

});

}

private void goToMainActivity() {

Intent intent=new Intent(this,MainActivity.class);

startActivity(intent);

finish();

}

/**

* Viewpager适配器

*/

private class GuideAdapter extends PagerAdapter {

@Override

public int getCount() {

return imageViews.size();

}

/**

* 判断当前分页是不是view

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

*

* @param view

* @param object

* @return

*/

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

/**

* 清理内存

* 从第一页滑动到第二页,此时第一页的内存应该释放

*

* @param container

* @param position

* @param object

*/

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(imageViews.get(position));//释放滑动过后的前一页

}

/**

* 得到---->暂时是没有用的

*

* @param object

* @return

*/

@Override

public int getItemPosition(Object object) {

return super.getItemPosition(object);

}

/**

* 初始化分页

*

* @param container

* @param position

* @return

*/

@Override

public Object 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);//设置图片的宽高

return imageView;

}

}

}

以下为动画资源代码

slide_in_left.xml

android:duration="1000"

android:fromXDelta="0%p"

android:toXDelta="-100%"

/>

slide_in_right.xml

android:duration="1000"

android:fromXDelta="100%p"

android:toXDelta="0"

/>

以上所述是小编给大家介绍的Android viewpager在最后一页滑动之后跳转到主页面的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的实现轮播图的示例代码,其中使用了 ViewPager 和 PagerAdapter: ```java public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private int[] imageIds = new int[]{R.drawable.image1, R.drawable.image2, R.drawable.image3}; private List<ImageView> imageViewList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.view_pager); // 初始化图片列表 for (int imageId : imageIds) { ImageView imageView = new ImageView(this); imageView.setImageResource(imageId); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageViewList.add(imageView); } // 设置ViewPager的适配器 viewPager.setAdapter(new MyPagerAdapter()); // 设置ViewPager的滑动监听器 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { // 当滑动最后一页时,跳转到第一页 if (position == imageViewList.size() - 1) { viewPager.setCurrentItem(0, false); } // 当滑动到第一页时,跳转最后一页 else if (position == 0) { viewPager.setCurrentItem(imageViewList.size() - 1, false); } } @Override public void onPageScrollStateChanged(int state) { } }); } /** * 自定义ViewPager的适配器 */ private class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageViewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = imageViewList.get(position); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } } ``` 在 onPageSelected() 方法中,当滑动最后一页时,将 ViewPager 的当前页设置为第一页,同时禁止滑动动画;当滑动到第一页时,将 ViewPager 的当前页设置为最后一页,同时禁止滑动动画。其中禁止滑动动画是通过第二个参数设置为 false 实现的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值