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使用RESTful接口案例详解
2022-08-08 23:41:52
使用Spring自定义实现IOC和依赖注入(注解方式)
2023-09-16 04:42:35
HTTP基本认证(Basic Authentication)的JAVA实例代码
2022-06-08 13:03:32
如何让C#、VB.NET实现复杂的二进制操作
2023-10-14 19:22:52
Winform项目中TextBox控件DataBindings属性
2023-03-29 15:25:15
Java集合继承体系详解
2023-12-03 00:22:13
使用Springboot自定义转换器实现参数去空格功能
2021-11-12 03:36:29
struts+spring+hibernate三个框架的整合
2022-08-08 08:13:15
Android 高仿微信转账金钱输入框规则
2022-03-06 19:54:20
Java Mybatis框架Dao层的实现与映射文件以及核心配置文件详解分析
2021-06-15 16:29:22
教你使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis)
2021-09-23 12:37:42
Android 调试工具用法详细介绍
2022-07-18 21:34:05
Java使用EasyExcel动态添加自增序号列
2023-11-17 01:54:37
浅谈两个jar包中包含完全相同的包名和类名的加载问题
2023-04-13 04:47:02
设置Android设备WIFI在休眠时永不断开的代码实现
2022-08-26 09:03:00
详解Java中String类的各种用法
2022-03-10 12:48:35
深入浅析Java反射机制
2023-11-25 07:02:03
关于idea引入spring boot <parent></parent>父依赖标红问题
2021-11-23 09:42:12
Java Mybatis批量修改封装详解
2021-12-29 22:41:52
关于多线程常用方法以及对锁的控制(详解)
2022-02-02 08:16:42