首页 > 代码库 > Android自定义控件6--轮播图广告的实现
Android自定义控件6--轮播图广告的实现
本文接着实现轮播图广告的监听滚动
本文地址:http://www.cnblogs.com/wuyudong/p/5920757.html,转载请注明源地址。
首先添加布局文件,实现小白点
shape_bg_point_enable.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <corners android:radius="5dp" /> <solid android:color="@android:color/white" /></shape>
shape_bg_point_disable.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <corners android:radius="5dp" /> <solid android:color="@android:color/darker_gray" /></shape>
再添加一个selector
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@drawable/shape_bg_point_enable"></item> <item android:state_enabled="false" android:drawable="@drawable/shape_bg_point_disable"></item></selector>
将selector添加到视图:
for (int i = 0; i < imageResIds.length; i++) { imageView = new ImageView(this); imageView.setBackgroundResource(imageResIds[i]); imageViewList.add(imageView); // 加小白点,指示器 pointView = new View(this); pointView.setBackgroundResource(R.drawable.selector_bg_point); layoutParams = new LayoutParams(7, 7); if (i != 0) { layoutParams.leftMargin = 10; } pointView.setEnabled(false); ll_point_container.addView(pointView, layoutParams); }
为ViewPager添加滑动监听
public class MainActivity extends Activity implements OnPageChangeListener ...... @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 滚动时调用 } @Override public void onPageSelected(int position) { // 新条目被选中时调用 position = position % 5; tv_desc.setText(contentDesc[position]); // 把之前的禁用,把最新的启用 ll_point_container.getChildAt(lastEnablePoint).setEnabled(false); ll_point_container.getChildAt(position).setEnabled(true); lastEnablePoint = position; } @Override public void onPageScrollStateChanged(int state) { // 滚动状态变化时调用 }
开启页面自动轮询:
//开启轮询 new Thread() { public void run() { while(isRunning) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //往下跳一位 runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } }); } }; }.start();
完整代码如下:
package com.wuyudong.viewpager;import java.util.ArrayList;import android.R.layout;import android.os.Bundle;import android.app.Activity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.LinearLayout.LayoutParams;import android.widget.TextView;public class MainActivity extends Activity implements OnPageChangeListener { private ViewPager viewPager; private int[] imageResIds; private ArrayList<ImageView> imageViewList; private ArrayList<View> pointViews; private LinearLayout ll_point_container; private String[] contentDesc; private TextView tv_desc; private int lastEnablePoint = 0; private boolean isRunning = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化布局 View 视图 initViews(); // Model 数据 initData(); // Controller 控制器 initAdapter(); //开启轮询 new Thread() { public void run() { while(isRunning) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //往下跳一位 runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } }); } }; }.start(); } @Override protected void onDestroy() { super.onDestroy(); isRunning = false; } private void initViews() { viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setOnPageChangeListener(this);// 设置滚动更新 tv_desc = (TextView) findViewById(R.id.tv_desc); ll_point_container = (LinearLayout) findViewById(R.id.ll_point_container); } private void initAdapter() { ll_point_container.getChildAt(0).setEnabled(true); tv_desc.setText(contentDesc[0]); // 设置适配器 viewPager.setAdapter(new MyAdapter()); //默认设置到中间的某个位置 int pos = Integer.MAX_VALUE / 2; //viewPager.setCurrentItem(pos - 3); viewPager.setCurrentItem(5000000); } private void initData() { // 初始化要显示的数据 // 图片资源id数组 imageResIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; // 文本描述 contentDesc = new String[] { "巩俐不低俗,我就不能低俗", "朴树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" }; imageViewList = new ArrayList<ImageView>(); pointViews = new ArrayList<View>(); ImageView imageView; View pointView; LayoutParams layoutParams; for (int i = 0; i < imageResIds.length; i++) { imageView = new ImageView(this); imageView.setBackgroundResource(imageResIds[i]); imageViewList.add(imageView); // 加小白点,指示器 pointView = new View(this); pointView.setBackgroundResource(R.drawable.selector_bg_point); layoutParams = new LayoutParams(7, 7); if (i != 0) { layoutParams.leftMargin = 10; } pointView.setEnabled(false); ll_point_container.addView(pointView, layoutParams); } } class MyAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } // 3、指定复用的判断逻辑 @Override public boolean isViewFromObject(View view, Object object) { // 当滑到新的条目,又返回来,view是否可以被复用 return view == object; } // 1、返回要显示的条目内容,创建条目 @Override public Object instantiateItem(ViewGroup container, int position) { // container:容器:ViewPager // position:当前要显示的条目的位置 position = position % 5; ImageView imageView = imageViewList.get(position); System.out.println("instantItem创建:" + position); // a、把view对象添加到container中 container.addView(imageView); // b、把view对象返回给框架,适配器 return imageView; // 必须要重写,否则抛异常 } // 2、销毁条目 @Override public void destroyItem(ViewGroup container, int position, Object object) { // object 要销毁的对象 System.out.println("destroyItem销毁:" + position); container.removeView((View) object); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 滚动时调用 } @Override public void onPageSelected(int position) { // 新条目被选中时调用 position = position % 5; tv_desc.setText(contentDesc[position]); // 把之前的禁用,把最新的启用 ll_point_container.getChildAt(lastEnablePoint).setEnabled(false); ll_point_container.getChildAt(position).setEnabled(true); lastEnablePoint = position; } @Override public void onPageScrollStateChanged(int state) { // 滚动状态变化时调用 }}
Android自定义控件6--轮播图广告的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。