ViewPager循环滑动和靠按钮来控制循环滑动
来源:互联网 发布:礼仪培训网络课程 编辑:程序博客网 时间:2024/04/29 16:53
ViewPager用按钮来控制,昨天说了一种方式是直接设置setcurrentItem(),但是今天发现如果我们要设置viewpager循环滑动的话这种方式似乎不可行,于是看源码发现了Viewpager的一个公共方法,Viewpager.arrowScroll() 1代表左侧滑动2代表右侧滑动下面贴上源码大家就了解了
public boolean executeKeyEvent(KeyEvent event) { boolean handled = false; if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_DPAD_LEFT://键盘方向键左键的控制,向左翻页 handled = arrowScroll(FOCUS_LEFT);//FOCUS_LEFT:17 break; case KeyEvent.KEYCODE_DPAD_RIGHT://右键 handled = arrowScroll(FOCUS_RIGHT);//FOCUS_RIGHT:66 break; case KeyEvent.KEYCODE_TAB: if (Build.VERSION.SDK_INT >= 11) { // The focus finder had a bug handling FOCUS_FORWARD and FOCUS_BACKWARD // before Android 3.0. Ignore the tab key on those devices. if (KeyEventCompat.hasNoModifiers(event)) { handled = arrowScroll(FOCUS_FORWARD);//FOCUS_FORWARD:2 } else if (KeyEventCompat.hasModifiers(event, KeyEvent.META_SHIFT_ON)) { handled = arrowScroll(FOCUS_BACKWARD);//FOCUS_BACKWARD:1 } } break; } } return handled; }
上面是实现按钮左右滑动,
下面实现Viewpager左右无限循环滑动,当然这种方式并不是真正意义上的循环滑动只不过是修改了适配器里getcount的方法返回一个无限大的值,adapter中的getView方法中的position重新根据实际数量取模,把viewpager设置在max二分之一的位置。因为这个值很大所以基本不可能滑动到position=0或者position=max的位置,给人的视觉上的效果还是左右滑动的,这样注意要设置viewpager的初始项目
我一般这样设置ViewPager.setcurrentpage(2*100);这样使用户看不到边界即可左侧滑动否则不能向左侧滑动,下面我们来看代码
package com.example.viewpager;import java.util.ArrayList;import java.util.List;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.ActionBarActivity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends ActionBarActivity { ViewPager pager ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<View> view = new ArrayList<View>(); List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { view.add(LayoutInflater.from(this).inflate(R.layout.item, null)); list.add(i + ""); } pager = (ViewPager) findViewById(R.id.viewpager); pager.setAdapter(new myadapter(view, this, list)); pager.setCurrentItem(2*100);/**初始化为这个 使用户看不到边界才能左侧滑动*/ findViewById(R.id.left).setOnClickListener(l); findViewById(R.id.right).setOnClickListener(l); } View.OnClickListener l=new View.OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.left: /**左侧滑动 此方法是Viewpager的一个自带方法*/ pager.arrowScroll(1); break; case R.id.right: /**右侧滑动 此方法是Viewpager的一个自带方法*/ pager.arrowScroll(2); break; } } }; class myadapter extends PagerAdapter { List<View> list; Context context; List<String> sss; public myadapter(List<View> list, Context context, List<String> sss) { this.list = list; this.context = context; this.sss = sss; } @Override public int getCount() { /** 设置成最大,使用户看不到边界*/ return Integer.MAX_VALUE; } @Override public int getItemPosition(Object object) { return super.getItemPosition(object); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // container.removeView(list.get(position)); // 销毁不需要的视图 这里并不需要调用// ((ViewGroup) container).removeView((View) object); } /**int posi;不能讲位置拿到外面来否则页面点击事件会乱序*/ @Override public Object instantiateItem(ViewGroup container, int position) { final int posi = position % sss.size(); //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。 container.removeView(list.get(posi)); //控件什么的尽量重新创建避免出现被父容器包裹着的异常抛出 TextView textView = (TextView) list.get(posi).findViewById( R.id.text); textView.setText(sss.get(posi)); container.addView(list.get(posi)); list.get(posi).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,posi+"" , Toast.LENGTH_SHORT).show(); } }); return list.get(posi); } }}
0 0
- ViewPager循环滑动和靠按钮来控制循环滑动
- ViewPager左右循环滑动
- viewpager左右循环滑动
- ViewPager的循环滑动
- ViewPager的循环滑动
- Android 循环滑动viewpager
- Android-ViewPager循环滑动
- ViewPager循环滑动
- ViewPager实现循环滑动
- ViewPager循环滑动
- ViewPager实现循环滑动
- viewpager自动循环滑动和手动滑动(手动滑动后自动滑动延后处理)
- viewpager左右循环滑动,自动滑动广告栏
- Android---ViewPager循环滑动+自动滑动
- ViewPager的左右循环滑动
- ViewPager实现左右循环滑动
- 左右循环滑动的viewpager
- android viewpager左右循环滑动
- Android-Parcelable理解与使用(对象序列化)
- 野生程序员的故事
- android、java中判断图片文件的格式
- Oracle 表空间及用户创建 sql 语句
- 蓝牙协议的命令和事件
- ViewPager循环滑动和靠按钮来控制循环滑动
- SVN的使用2-如何解决无法提交.a文件的问题
- js去除字符串中重复的编号,并删除自己的编号
- 数据库null 值排序
- 热区点击和背景图片点击(优先顺序问题)
- uva1220(基础树形dp)
- QQ于WEB网站接入流程详细
- 使用jquery获取父元素或父节点的方法
- javascript中document学习