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

 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(三种方法),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索viewpager
, activity
, viewpager最后一页
android新特征
viewpager最后一页、viewpager activity、viewpager放activity、viewpager和activity、activity实现拖拽,以便于您获取更多的相关知识。

时间: 2024-10-03 17:19:06

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

Android 实现图片模糊、高斯模糊、毛玻璃效果的三种方法_Android

在前几天写过一个使用glide-transformations的方法实现高斯模糊的方法,今天偶然间有发现一个大神写的另一个方法,感觉挺不错的,分享一下: 效果图: 原文链接:点击访问 这使用也很简单,导入依赖,使用模糊方法就行,就这两步搞定 依赖: compile 'net.qiujuer.genius:blur:2.0.0-beta4' 实现方法有三种,第一个是Java实现的,第二个和第三个是调用C语言实现的 ,具体的区别也就是代码执行的耗时操作时间,从图片中可以看出Java使用时间远大于c运

Android中使用定时器的三种方法_Android

本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第一种方法:Thread.sleep();方法 Runnable runnable = new Runnable() { @Override public void run() { while (true) { mHandler.sendEmptyMessage(0); try { Thread.sl

Android中通过外部程序启动App的三种方法_Android

第一种:直接通过包名: 复制代码 代码如下: Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.joyodream.jiji");                 startActivity(LaunchIntent); 第二种:通过自定义的Action 复制代码 代码如下: Intent intent = new Intent();                 intent.setAc

Android启动页面定时跳转的三种方法_Android

从我所做的项目来看,几乎都少不了开始页面,启动页面的作用能够打广告.发公告.做缓存处理.更新数据等等!Android实现开始页面的跳转,就是打开一个Android手机APP的欢迎界面后跳转到指定界面,下面就让我简单介绍下比较常用的开始页面的跳转方法吧. 一.在onCreate里设置个Timer,然后建立Intent指向你要调用的Activity.设置Timer 任意秒后执行startActivity即可!(Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,它可以计划执行一个任务一次

Android开发笔记 改变字体颜色的三种方法_Android

1.在layout文件下的配置xml文件中直接设置字体颜色,通过添加android:textcolor="#FFFFFF"来变化颜色 但这样的效果只能让字体千篇一律的显示一种颜色 2.在activity中通过TextView tv=new TextView(this):实例化一个textview,通过setContentView(tv);将其加载到当前activity,设置要显示的内容String str="想要显示的内容":通过以下代码可以实现部分文本字体的改变,

android实现背景平铺的三种方法_Android

方法1: 系统api实现 复制代码 代码如下: Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);  //bitmap = Bitmap.createBitmap(100, 20, Config.ARGB_8888);  BitmapDrawable drawable = new BitmapDrawable(bitmap);  drawable.setTileModeXY(TileMode.

Android新特性之CardView的简单使用

Android新特性之CardView的简单使用 在上篇文章中,我们学习了RecyclerView的简单使用,这边文章我们学习下Android 5.0的另一个新增加的控件CardView.首先讲解写CardView的基本使用,然后在结合RecyclerView使用CardView进行填充写个小实例. 环境配置 一.在Eclipse的环境中配置同上篇文章,引入android.support.v7包进行使用.参照文章:RecyclerView的简单使用. 二.在Android Studio中进行使用

android实现ViewPager懒加载的三种方法

在项目中ViewPager和Fragment接口框架已经是处处可见,但是在使用中,我们肯定不希望用户在当前页面时就在前后页面的数据,加入数据量很大,而用户又不愿意左右滑动浏览,那么这时候ViewPager中本来充满善意的预加载就有点令人不爽了.我们能做的就是屏蔽掉ViewPager的预加载机制.虽然ViewPager中提供的有setOffscreenPageLimit()来控制其预加载的数目,但是当设置为0后我们发现其根本没效果,这个的最小值就是1,也就是你只能最少前后各预加载一页.那么,这时候

三种方法让Response.Redirect在新窗口打开_实用技巧

Response.Rederect在默认情况下是在本页跳转,所以除了在js中用window.open或是给A标签添加target属性之外,在后台似乎不能来打开新的页面,其实不然,通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开.下面用三种方法来实现. 1 .给form指定target属性,那么本页面中所有的Response.Rederect都将在新的窗口中打开.代码如下: 复制代码 代码如下: protected void Page_Lo