Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)

作者:NN955 时间:2021-11-30 03:05:40 

 android新特性页面,ViewPager拖拽到最后一页再拖拽打开其他Activity.实现的方式有很多,效果比较好的就是到了最后一页再拖拽出现禁止蓝色条时再跳转activity

方式一:拿到ViewPager的边界条EdgeEffectCompat,判断是否到了边界(获取EdgeEffectCompat通过反射,方法来自网络最后边会给出原文)


/**
* 初始化view
*/
private void initView(){
pager = (ViewPager) findViewById(R.id.help_viewpages);
try {
Field leftEdgeField = pager.getClass().getDeclaredField("mLeftEdge");
Field rightEdgeField = pager.getClass().getDeclaredField("mRightEdge");
if (leftEdgeField != null && rightEdgeField != null) {
leftEdgeField.setAccessible(true);
rightEdgeField.setAccessible(true);
leftEdge = (EdgeEffectCompat) leftEdgeField.get(pager);
rightEdge = (EdgeEffectCompat) rightEdgeField.get(pager);
}
} catch (Exception e) {
e.printStackTrace();
}
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
if(rightEdge!=null&&!rightEdge.isFinished()){//到了最后一张并且还继续拖动,出现蓝色限制边条了
startActivity(new Intent(HelpActivity.this, MainActivity.class));
HelpActivity.this.finish();
}
}
@Override
public void onPageSelected(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
});

方法二:也是在OnPageChangeListener里判断当前滚动的页数是不是最后一页


pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
//判断当前页数是否==总页数
}
});

在此小编推荐方法一,方法二需要判断PageScrollStateChanged(int arg0)的滚动状态,也可以实现一样的效果

转载高手ViewPager在拖拽到左边和右边的时候,禁止显示黄色或者蓝色的渐变图片的解决方法(以备自己以后查阅)


package com.example.viewpagertest;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v4.widget.EdgeEffectCompat;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnPageChangeListener {
private ViewPager viewpager;
private List<ImageView> views;
private EdgeEffectCompat leftEdge;
private EdgeEffectCompat rightEdge;
private int[] ids = {R.drawable.iframe_4,R.drawable.iframe_5,R.drawable.iframe_6,R.drawable.iframe_7,R.drawable.iframe_8};
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
viewpager = (ViewPager) findViewById(R.id.viewpager);
initViewPager();
initData();
}
private void initData() {
views = new ArrayList<ImageView>();
for(int i=0;i<ids.length;i++){
ImageView iv = new ImageView(this);
iv.setImageResource(ids[i]);
views.add(iv);
}
adapter = new MyAdapter();
viewpager.setAdapter(adapter);
viewpager.setOnPageChangeListener(this);
}
class MyAdapter extends PagerAdapter{
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView(views.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager)container).addView(views.get(position));
return views.get(position);
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
if (leftEdge != null && rightEdge != null) {
leftEdge.finish();
rightEdge.finish();
leftEdge.setSize(0, 0);
rightEdge.setSize(0, 0);
}
}
@Override
public void onPageSelected(int arg0) {
}
private void initViewPager() {
try {
Field leftEdgeField = viewpager.getClass().getDeclaredField("mLeftEdge");
Field rightEdgeField = viewpager.getClass().getDeclaredField("mRightEdge");
if (leftEdgeField != null && rightEdgeField != null) {
leftEdgeField.setAccessible(true);
rightEdgeField.setAccessible(true);
leftEdge = (EdgeEffectCompat) leftEdgeField.get(viewpager);
rightEdge = (EdgeEffectCompat) rightEdgeField.get(viewpager);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

以上所述是小编给大家介绍的Android新特性页面之ViewPager拖拽到最后一页再拖拽打开其他Activity(三种方法)网站的支持!

来源:http://blog.csdn.net/nn955/article/details/46240371

标签:viewpager,activity,android
0
投稿

猜你喜欢

  • SpringMVC文件上传中要解决的问题大汇总

    2023-09-02 06:09:20
  • linux操作系统安装MONO执行C#程序的详解步骤

    2022-10-04 18:20:04
  • java多线程之停止线程的方法实例代码详解

    2023-03-23 04:35:21
  • C# 格式化字符首字母大写的方法

    2022-04-28 00:05:12
  • Java关于桶排序的知识点总结

    2023-12-06 03:18:04
  • C# 实现dataGridView选中一行右键出现菜单的示例代码

    2022-05-12 05:15:55
  • Java初学者问题图解(动力节点Java学院整理)

    2023-10-15 18:06:11
  • C#反射调用dll文件中的方法操作泛型与属性字段

    2022-09-15 03:24:04
  • Spring MVC Mybatis多数据源的使用实例解析

    2022-02-13 20:37:19
  • 详解Android系统中的root权限获得原理

    2023-06-19 20:28:25
  • 解决C# winForm自定义鼠标样式的两种实现方法详解

    2021-07-15 17:10:46
  • C# ListBox中的Item拖拽代码分享

    2022-04-12 14:06:41
  • Android实现掷骰子效果

    2022-06-16 01:09:16
  • Java高版本Api在Android中的使用方法详解

    2023-01-19 20:03:08
  • maven继承父工程统一版本号的实现

    2023-01-27 09:19:49
  • Android的Launcher启动器中添加快捷方式及小部件实例

    2022-10-26 13:05:14
  • Android窗口小部件基础编写代码实例

    2022-05-09 20:58:00
  • Android 数据存储方式有哪几种

    2023-12-10 17:20:16
  • java线程池ThreadPoolExecutor的八种拒绝策略示例详解

    2021-06-24 11:31:10
  • Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解

    2022-10-31 11:17:22
  • asp之家 软件编程 m.aspxhome.com