package com.itheima27.viewpagerdemo;

 import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
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 List<ImageView> imageViewList;
private TextView tvDescription;
private LinearLayout llPointGroup;
private int previousEnabledPosition = 0; // 前一个被选中的"点"的索引, 默认情况下: 0 private String[] imageDescriptionArray = {
"巩俐不低俗,我就不能低俗",
"扑树又回来啦!再唱经典老歌引万人大合唱",
"揭秘北京电影如何升级",
"乐视网TV版大派送",
"热血屌丝的反杀"
};
private ViewPager mViewPager; private boolean isStop = false; // 是否停止子线程, 不会停止 @Override
protected void onDestroy() {
isStop = true;
super.onDestroy();
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); init(); // 开启线程无限自动移动
Thread mThread = new Thread(new Runnable() {
@Override
public void run() {
while(!isStop) {
// 每隔2秒钟, 发送一条消息到主线程, 更新viewpager的界面
SystemClock.sleep(2000); runOnUiThread(new Runnable() {
@Override
public void run() {
// 此方法是在主线程中执行
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
}
});
}
}
});
mThread.start();
} private void init() {
mViewPager = (ViewPager) findViewById(R.id.viewpager);
llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group);
tvDescription = (TextView) findViewById(R.id.tv_image_description); imageViewList = new ArrayList<ImageView>(); int[] imageResIDs = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
}; ImageView iv;
View view;
LayoutParams params;
for (int id : imageResIDs) {
iv = new ImageView(this);
iv.setBackgroundResource(id);
imageViewList.add(iv); // 每循环一次, 添加一个点到Linearlayout中
view = new View(this);
view.setBackgroundResource(R.drawable.point_background);
params = new LayoutParams(5, 5);
params.leftMargin = 5;
view.setEnabled(false);
view.setLayoutParams(params); llPointGroup.addView(view); // 向线性布局中添加"点"
} mViewPager.setAdapter(new MyAdapter());
mViewPager.setOnPageChangeListener(this); // 初始化图片描述, 和哪一个点被选中
// tvDescription.setText(imageDescriptionArray[0]);
// llPointGroup.getChildAt(0).setEnabled(true); // 初始化ViewPager的默认position为Integer.Max_value的一半
int index = (Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2 % imageViewList.size());
mViewPager.setCurrentItem(index); // 设置当前viewpager选中的pager页, 会触发OnPageChangeListener.onPagerSelected } class MyAdapter extends PagerAdapter { @Override
public int getCount() {
return Integer.MAX_VALUE;
} /**
* 复用对象.
* true 复用对象
* false 用的是object
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
} /**
* 销毁对象
* @param position 将要被销毁对象的索引位置
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageViewList.get(position % imageViewList.size()));
} /**
* 初始化一个view对象
* @param position 将要被创建的对象的索引位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 先把对象添加到viewpager中, 再返回当前对象
container.addView(imageViewList.get(position % imageViewList.size()));
return imageViewList.get(position % imageViewList.size());
}
} @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageSelected(int position) { // 取余后的索引
int newPosition = position % imageViewList.size(); // 根据索引设置图片的描述
tvDescription.setText(imageDescriptionArray[newPosition]); // 把上一个点设置为未选中
llPointGroup.getChildAt(previousEnabledPosition).setEnabled(false); // 根据索引设置哪一个点被选中
llPointGroup.getChildAt(newPosition).setEnabled(true); previousEnabledPosition = newPosition;
}
}

viewpage广告条的制作的更多相关文章

  1. Flutter实战视频-移动电商-13.首页_广告Banner组件制作

    13.首页_广告Banner组件制作 主要是做这个小广告条. 其实就是读取一个图片做一个widget放到这里 使用stlessW快速生成 定义一个变量存放图片的url地址: 这样我们的广告条就写完了 ...

  2. 高仿京东APP首页“京东快报”自己主动向上滚动的广告条

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51013562 本文出自:[顾林海的博客] 前言 上次在京东APP上买东 ...

  3. 了解 JavaScript (6)– 广告条(Banner)

    在 Web 上冲浪时,常常会见到定期在图像之间切换的广告条.我们可以用 JavaScript 来实现,重复循环显示它们. 创建循环的广告条 RotatingBanner.html 页面中在循环的广告条 ...

  4. Unity3d Android程序嵌入Admob广告条

    原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140441353482/ Seems like using a simple A ...

  5. Unity NGUI弧形血条的制作

    unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ...

  6. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  7. Android中使用ViewPager实现广告条

    我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中Vie ...

  8. android自定义控件之滚动广告条

    在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...

  9. 自定义控件(视图)2期笔记03:自定义控件之使用系统控件(优酷案例之广告条Viewpager)

    1.首先我们看看运行效果,如下: 2. 下面就是详细实现这个效果的过程: (1)新建一个Android工程,命名为"广告条的效果",如下: (2)这里用到一个控件ViewPager ...

随机推荐

  1. vs2010编译lua-5.3.2

    lua-5.3.2.tar.gz 解开在 D:\lua 1. 启动VS命令行 2. c:\program files\microsoft visual studio 10.0\vc\bin>cd ...

  2. FastJson的基本用法----转

    1. [文件] User.java ~ 243B   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class User{     private int id;    ...

  3. mysql row number的实现

    CREATE TABLE `test_id` (`id` int(11) NOT NULL DEFAULT 0 ,`name` varchar(255) CHARACTER SET utf8 COLL ...

  4. collection的框架结构

    经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashSet.ArrayList,因为分不清楚它们之间的关系,所以在使用时经常会混淆,以至于不知道从何下手.在这儿作了一个 ...

  5. [web] 200 OK (from cache) 与 304 Not Modified

    为什么有的缓存是 200 OK (from cache),有的缓存是 304 Not Modified 呢?很简单,看运维是否移除了 Entity Tag.移除了,就总是 200 OK (from c ...

  6. 【linux】/etc/passwd文件

    /etc/passwd文件内容格式 /etc/passwd是保存用户信息的文件. 格式:用户名: 密码 : uid  : gid :用户描述:主目录:登陆shell 举个例子: root:x:0:0: ...

  7. 【linux】locate介绍

    Locale和everything 类似,有本地的检索库,它会自动更新检索库,但新创建的文件,不能用locale 查到,需要手动更新检索库update db 才能搜索到,在/tmp 目录下的文件不能搜 ...

  8. jQuery-webcam(.NET)实现WEB摄像头监控

    jQuery-webcam是一个非常好用的摄像头监控工具,DEMO可官方下载地址http://www.xarg.org/project/jquery-webcam-plugin/ 1.下载解压后,jq ...

  9. s3c2440存储控制器和地址以及启动的理解

    转自:http://blog.sina.com.cn/s/blog_5ddb672b0100fkcf.html 1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地 ...

  10. SVN服务器几种备份策略---重点svnsync备份---OK

    配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏.误操作造成数据无法恢复的灾难性后果.因此制定一个完整的备份策略非常重要. 一般来说,备份策略应规定如下几部分内容:备份频度.备份方式.备 ...