ViewPager实现图片轮播_简单版
2015-01-13 10:23
405 查看
非原创,仅为个人学习笔记。
自动轮播的时候有循环播放,手动不能从最后一页滑到第0页。
代码一: activity_main.xml
代码二:
代码三:
截图:
自动轮播的时候有循环播放,手动不能从最后一页滑到第0页。
代码一: activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="270dp" /> <LinearLayout android:id="@+id/dotLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > </LinearLayout> </LinearLayout>
代码二:
public class MainActivity extends Activity { private ViewPager viewPager; private ViewPagerAdapter adapter; private LinearLayout dotLayout; private ImageView dot; private ImageView dots[]; private Runnable runnable; private int autoChangeTime=2000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViewPager(); initDot(); initRunnable(); } private void initViewPager(){ adapter=new ViewPagerAdapter(this); adapter.change(getList());//直接作为构造参数传入也可 viewPager=(ViewPager)findViewById(R.id.viewPager); viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(pageChangeListener); } OnPageChangeListener pageChangeListener=new OnPageChangeListener(){ @Override public void onPageScrollStateChanged(int arg0) { Log.v("zz","zz-->>onPageScrollStateChanged="+arg0); //arg0 表示滑动状态:1正在滑动;2滑动完毕;3没有滑动,展示状态; } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { Log.v("zz","zz-->>onPageScrolled-->>arg0="+arg0+"---arg1="+arg1 +"---arg2="+arg2); //滑动过程调用:从第arg0滑动;arg1滑动完成百分比;arg2滑动了多少距离; viewHandler.removeCallbacks(runnable); //removeCallbacks清空队列中的Runnable,防止手动滑动和定时滑动冲突 viewHandler.postDelayed(runnable, autoChangeTime); } @Override public void onPageSelected(int arg0) { Log.v("zz","zz-->>onPageSelected="+arg0); //滑动完成后调用:现在展示的是第arg0页 setCurDot(arg0); } }; private List<Integer> getList() { List<Integer> list = new ArrayList<Integer>(); list.add(R.drawable.nba1); list.add(R.drawable.nba2); list.add(R.drawable.nba3); list.add(R.drawable.nba4); return list; } private void initDot() { dotLayout=(LinearLayout)findViewById(R.id.dotLayout); LayoutParams lp=new LayoutParams(40,40); dots=new ImageView[adapter.getCount()]; for(int i=0;i<adapter.getCount();i++){ dot=new ImageView(this); dot.setLayoutParams(lp); dots[i]=dot; dots[i].setTag(i); dots[i].setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { int position=(Integer)v.getTag(); setCurView(position); } }); if(i==0){ dots[i].setBackgroundResource(R.drawable.dot_focus); }else{ dots[i].setBackgroundResource(R.drawable.dot_normal); } dotLayout.addView(dots[i]); } } //高亮dotLayout中对应的ViewPager页面 private void setCurDot(int position){ for(int i=0;i<dots.length;i++){ if(position==i){ dots[i].setBackgroundResource(R.drawable.dot_focus); }else{ dots[i].setBackgroundResource(R.drawable.dot_normal); } } } //切换ViewPager页面 private void setCurView(int position){ if(position<0||position>adapter.getCount()){ return; } viewPager.setCurrentItem(position); } Handler viewHandler=new Handler(){ public void handleMessage(android.os.Message msg) { setCurView(msg.what); }; }; private void initRunnable() { runnable =new Runnable(){ @Override public void run() { int next=viewPager.getCurrentItem()+1; if(next>=adapter.getCount()){ next=0;//自动轮播,循环播放 } viewHandler.sendEmptyMessage(next); //sendEmptyMessage作用:send a msg containing only the what value } }; viewHandler.postDelayed(runnable,autoChangeTime); } }
代码三:
public class ViewPagerAdapter extends PagerAdapter { private Context context; private List<Integer> paths; public ViewPagerAdapter(Context ctx){ context=ctx; } public void change(List<Integer> paths){ this.paths=paths; } @Override public int getCount() { return paths.size(); } @Override public boolean isViewFromObject(View view, Object obj) { return view==(View)obj; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeViewInLayout((View)object); } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imgView=new ImageView(context); Drawable drawable=context.getResources().getDrawable(paths.get(position)); imgView.setImageDrawable(drawable); ((ViewPager)container).addView(imgView); //instantiateItem新增Item用的。 return imgView; } }
截图:
相关文章推荐
- Android ViewPager控件实现图片轮播
- 安卓:Handler实现图片轮播(非ViewPager)
- ViewPager+Handler实现图片自动轮播的效果
- Android 仿网易新闻 ViewPager 实现图片自动轮播
- 使用ViewPager实现图片轮播
- Viewpager实现图片轮播,广告轮播
- Android之利用Viewpager实现图片的轮播效果
- RollViewPager实现android图片轮播效果
- Android之ViewPager实现图片无限循环轮播
- Android中ViewPager的使用(二):实现图片轮播效果
- android ViewPager,ViewFlipper,ViewFlow三种实现图片轮播方案介绍
- ViewPager + Handler 实现的图片自动轮播
- 用viewpager实现图片轮播
- ViewPager实现图片轮播,下方带小点显示当前位置
- ViewPager实现图片轮播
- Android ViewPager从网络获取图片实现无限轮播
- Android Viewpager实现图片轮播(仿优酷效果)
- android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据
- 用viewpager实现图片轮播
- Android:使用ViewPager实现左右滑动切换图片 (简单版)