利用viewPager实现的自动滑动的广告栏
2015-11-12 18:36
573 查看
首先上一下效果图
我们将实现图片与文字的手动切换与自动切换,以及指示圆点的自动切换。
这里主要的工作在ViewPagerAdapter.
步骤:
1. 在activity的布局文件中使用viewpager,
2. viewPager的子布局
3. 用布局方式画圆点。
4. 初始化adapter, 在onPagerChangeListener中控制小点的切换。
5. 定时器控制自动滑动。
activity的布局文件
<RelativeLayout 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="com.jiang.wei.mypractice.BannersActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="200dp"></android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/llPots" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="180dp" android:orientation="horizontal"> </LinearLayout> </RelativeLayout>
viewPager的子布局, 一个ImageView,和一个TextView用户放图片与标题
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp" android:orientation="vertical"> <ImageView android:id="@+id/ivPicture" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="150dp" android:orientation="vertical"> <TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="xxx" /> </LinearLayout> </FrameLayout>
用布局方式画圆点,并做成选择器的形式,方便切换。
<?xml version="1.0" encoding="utf-8"?> <shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 填充颜色 --> <solid android:color="@android:color/darker_gray" ></solid> <size android:width="3dp" android:height="3dp"></size> </shape> <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/select_spot" android:state_selected="true"></item> <item android:drawable="@drawable/unselect_spot"></item> </selector> selector <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/select_spot" android:state_selected="true"></item> <item android:drawable="@drawable/unselect_spot"></item> </selector>
下面是主代码。
这里有两个计算的地方
int initPosition = (Integer.MAX_VALUE / 2) / size * size; 这里初始化位置为size的整数倍,
position %= pagerNames.length; 让position 一直保持在 [0-size]之间
public class BannersActivity extends AppCompatActivity { private ViewPager viewPager; private LinearLayout llPots; private static String[] pagerNames = {"美女一", "美女二", "美女三", "美女四", "美女五"}; private static int[] pictrues = {R.drawable.girl1, R.drawable.girl2, R.drawable.girl3, R.drawable.girl4, R.drawable.girl5}; private Timer timer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banners); viewPager = (ViewPager) findViewById(R.id.viewPager); viewPager.setAdapter(new MyPagerAdapter()); int size = pagerNames.length; int initPosition = (Integer.MAX_VALUE / 2) / size * size; //设置其实位置为Interger.MAX_VALUE的中间位置 viewPager.setCurrentItem(initPosition); llPots = (LinearLayout) findViewById(R.id.llPots); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //修改指示点 setSelect(position); } @Override public void onPageScrollStateChanged(int state) { } }); //设置手指触摸时停止自动滑动 viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { stopLoopThread(); } if (event.getAction() == MotionEvent.ACTION_UP) { startLoopTherad(); } return false; } }); initSpot(); startLoopTherad(); } private void stopLoopThread() { timer.cancel(); timer = null; } private void startLoopTherad() { //设置定时器控制自动滑动 TimerTask task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } }); } }; timer = new Timer(); timer.schedule(task, 2000, 2000); } //初始化初示的小点 private void initSpot() { for (int i = 0; i < pagerNames.length; i++) { ImageView iv = new ImageView(this); iv.setPadding(5, 0, 5, 0); iv.setImageResource(R.drawable.selector_spot); llPots.addView(iv); } setSelect(0); } //切换小点 public void setSelect(int positoin) { for (int i = 0; i < pagerNames.length; i++) { ImageView iv = (ImageView) llPots.getChildAt(i); iv.setSelected(i == positoin % pagerNames.length); } } private class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { position %= pagerNames.length; View view = View.inflate(BannersActivity.this, R.layout.item_banners, null); ImageView ivPicture = (ImageView) view.findViewById(R.id.ivPicture); ivPicture.setBackgroundResource(pictrues[position]); TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle); tvTitle.setText(pagerNames[position]); container.addView(view); return view; } } }
相关文章推荐
- 使用ViewPager实现高仿launcher左右拖动效果
- 实现轮转广告带底部指示的自定义ViewPager控件
- 自定义RadioButton和ViewPager实现TabHost带滑动的页卡效果
- 使用ViewPager实现android软件使用向导功能实现步骤
- Android编程ViewPager回弹效果实例分析
- Android ViewPager相册横向移动的实现方法
- Android编程实现ListView头部ViewPager广告轮询图效果
- Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法
- viewpager的layout_width="wrap_content"无效问题
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- Fragment+viewpager+Fragment 嵌套 第二次进入该fragment不显示数据
- android自定义tabbar,并带badgeview消息提示
- ViewPager播放图片问题
- CollapsingAvatarToolbar 头像随ListView滚动缩回到ActionBar特
- Material-Movies-master 影视软件封面页面呈现
- AppManager-for-Android App应用管理
- ImageView实现照片墙效果
- setOnPageChangeListener方法提示过期
- ViewPager : Banner滚动
- ViewPager的基础运用