很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的状态也在变化),用定时器来实现不难。
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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.util.Log;
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 {
protected static final String TAG = "MainActivity";
private List<ImageView> imageViewList;
private ViewPager mViewPager;
private final int[] imageResIDs = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
};
private final String[] imageDescriptions = {
"巩俐不低俗,我就不能低俗",
"扑树又回来啦!再唱经典老歌引万人大合唱",
"揭秘北京电影如何升级",
"乐视网TV版大派送",
"热血屌丝的反杀"
};
private TextView tvImageDescription; // 图片描述
private LinearLayout llPointGroup; // 点控件的组
private int previousPosition = 0; // viewpager选中的前一个position
private boolean isStop = false; // 控制循环的子线程是否停止
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
new Thread(new Runnable() {
@Override
public void run() {
// 每两秒钟向主线程发送一条消息, 切换viewpager的界面
while(!isStop) {
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
Log.i(TAG, "循环线程停止了");
}}).start();
}
@Override
protected void onDestroy() {
isStop = true;
super.onDestroy();
}
private void initView() {
mViewPager = (ViewPager) findViewById(R.id.viewpager);
llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group);
tvImageDescription = (TextView) findViewById(R.id.tv_image_description);
imageViewList = new ArrayList<ImageView>();
ImageView iv;
View pointView;
LayoutParams params;
for (int i = 0; i < imageResIDs.length; i++) {
iv = new ImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);
// 根据图片添加点
pointView = new View(this);
params = new LayoutParams(5, 5);
params.leftMargin = 5;
pointView.setLayoutParams(params);
pointView.setEnabled(false);
pointView.setBackgroundResource(R.drawable.point_bg);
llPointGroup.addView(pointView);
}
MyPagerAdapter mAdapter = new MyPagerAdapter();
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
int item = (Integer.MAX_VALUE / 2) - ((Integer.MAX_VALUE / 2) % imageViewList.size());
mViewPager.setCurrentItem(item); // 设置当前选中的item的position
tvImageDescription.setText(imageDescriptions[previousPosition]);
llPointGroup.getChildAt(previousPosition).setEnabled(true); // 第一点被选中
}
class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
/**
* 移动的对象和进来的对象如果是同一个就返回true, 代表复用view对象
* false 使用object对象
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
/**
* 需要销毁的对象的position传进来
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// 移除掉指定position的对象
mViewPager.removeView(imageViewList.get(position % imageViewList.size()));
}
/**
* 加载position位置的view对象
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 添加指定position的对象
mViewPager.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
}
/**
* 当viewpager页面切换时回调
* @param position 就是当前显示的page页
*/
@Override
public void onPageSelected(int position) {
tvImageDescription.setText(imageDescriptions[position % imageViewList.size()]);
llPointGroup.getChildAt(position % imageViewList.size()).setEnabled(true);
llPointGroup.getChildAt(previousPosition).setEnabled(false);
previousPosition = position % imageViewList.size();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# ViewPager
# 图片轮翻
# Android实现卡片翻转动画
# Android自定义ViewPager实现纵向滑动翻页效果
# Android CardView+ViewPager实现ViewPager翻页动画的方法
# Android ViewPager实现左右滑动翻页效果
# android ViewPager实现滑动翻页效果实例代码
# Android原生ViewPager控件实现卡片翻动效果
# 我就
# 都有
# 也在
# 万人
# 有几个
# 自带
# 来实现
# 每隔
# 北京
# 翻页
# 回调
# 几秒钟
# 大家多多
# 移除
# 复用
# 经典老歌
# 加载
# 视网
# 停止了
# private
相关文章:
建站之星如何实现五合一智能建站与营销推广?
网站图片在线制作软件,怎么在图片上做链接?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
建站之星如何保障用户数据免受黑客入侵?
英语简历制作免费网站推荐,如何将简历翻译成英文?
创业网站制作流程,创业网站可靠吗?
Swift中switch语句区间和元组模式匹配
建站主机系统SEO优化与智能配置核心关键词操作指南
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站之星后台密码如何安全设置与找回?
建站之星如何实现网站加密操作?
建站上市公司网站建设方案与SEO优化服务定制指南
C++时间戳转换成日期时间的步骤和示例代码
建站之星代理商如何保障技术支持与售后服务?
如何彻底删除建站之星生成的Banner?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何续费美橙建站之星域名及服务?
如何撰写建站申请书?关键要点有哪些?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
详解jQuery停止动画——stop()方法的使用
如何在阿里云购买域名并搭建网站?
网页设计与网站制作内容,怎样注册网站?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
贸易公司网站制作流程,出口贸易网站设计怎么做?
威客平台建站流程解析:高效搭建教程与设计优化方案
广州营销型建站服务商推荐:技术优势与SEO优化解析
郑州企业网站制作公司,郑州招聘网站有哪些?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
linux top下的 minerd 木马清除方法
内网网站制作软件,内网的网站如何发布到外网?
成都网站制作报价公司,成都工业用气开户费用?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
魔方云NAT建站如何实现端口转发?
如何选择PHP开源工具快速搭建网站?
黑客如何利用漏洞与弱口令入侵网站服务器?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
建站之星备案流程有哪些注意事项?
再谈Python中的字符串与字符编码(推荐)
制作证书网站有哪些,全国城建培训中心证书查询官网?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
已有域名和空间如何搭建网站?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何快速搭建高效WAP手机网站?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何登录建站主机?访问步骤全解析
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站之星后台管理:高效配置与模板优化提升用户体验
*请认真填写需求信息,我们会在24小时内与您取得联系。