Android广告轮播图实现
先看效果
第一步,布局
<?xml version="1.0" encoding="utf-8"?>
<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.example.xw.myviewpager.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="180dp">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"> </android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:background="#66000000"
android:layout_height="30dp">
<LinearLayout
android:id="@+id/point_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center"
> </LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
这里的point_container用来做小圆点的容器
二 圆点形状和状态选择器
bg_shape.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="#FFFFFF"/>
</shape>
bg_shape2.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="#808080"/>
</shape>
selector.xml
"1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@drawable/bg_shape"/>
<item android:state_enabled="false" android:drawable="@drawable/bg_shape2"/>
</selector>
enable="false"是灰色圆点,当state_enabled="true"是白色圆点
三 MainActivity
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{
private ViewPager vp;
private int[] imas;
private LinearLayout ll;
private ArrayList<ImageView> imaList;
private Boolean flag; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化布局
initViews();
//数据
initData(); //适配器
initAdapter();
flag=true;
//实现自动轮播
new Thread(new Runnable() {
@Override
public void run() { while (flag) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
vp.setCurrentItem(vp.getCurrentItem() + 1);
}
});
}
}
}).start();
} private void initAdapter() {
ll.getChildAt(0).setEnabled(true);
vp.setAdapter(new MyAdapter());
vp.setCurrentItem(Integer.MAX_VALUE/2+2);//这里以一个%5为0的数开始,这样打开默认会在第0个item显示
} @Override
protected void onDestroy() {
super.onDestroy();
flag=false;
} private void initData() {
} private void initViews() {
vp = (ViewPager) findViewById(R.id.vp);
vp.setOnPageChangeListener(this);
ll= (LinearLayout) findViewById(R.id.point_container);
//图片数组
imas = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e,};
ImageView iv;
imaList = new ArrayList<ImageView>();
View pointview;
for (int i = 0; i < imas.length; i++) {
iv = new ImageView(this);
iv.setImageResource(imas[i]);
imaList.add(iv); //加小白点
pointview =new View(this);
pointview.setEnabled(false);
pointview.setBackgroundResource(R.drawable.selector);
LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(15,15);
//params.gravity= Gravity.CENTER;
if(i!=0)
params.leftMargin=10;
ll.addView(pointview,
params );
} } @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
for(int i=0;i<ll.getChildCount();i++){
ll.getChildAt(i).setEnabled(false);
}
ll.getChildAt(position%5).setEnabled(true);//设置小白点
} @Override
public void onPageScrollStateChanged(int state) { } class MyAdapter extends PagerAdapter {
@Override
public Object instantiateItem(ViewGroup container, int position) {
int newposition =position%5;//得到新位置
ImageView imageView=imaList.get(newposition);
container.addView(imageView);
return imageView;//把View对象返回给框架,必须重写
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object); } @Override
public int getCount() {
return Integer.MAX_VALUE;
} @Override //判断复用
public boolean isViewFromObject(View view, Object object) {
return view==object;
} }
}
Android广告轮播图实现的更多相关文章
- iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- android中广告轮播图总结
功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,set ...
- Android ViewPager轮播图
Android客户端开发中很多时候需要用到轮播图的方式进行重点新闻的推送或者欢迎页面的制作,下面这个轮播图效果的Deamo来自互联网再经过修改而成. 1.布局文件activity_main.xml中添 ...
- JavaScripts广告轮播图以及定时弹出和定时隐藏广告
轮播图: 函数绑定在body标签内 采用3张图,1.jpg 2.jpg 3.jpg 利用定时任务执行设置图片属性 src 利用for循环可以完成3秒一次 一替换. 定时弹出广告: 由于bod ...
- jquery 广告轮播图
轮播图 /*轮播图基本功能: * 1图片切换 * 1.1图片在中间显示 * 1.2图片淡入淡出 * 2左右各有一个按钮 * 2.1点击左按钮,图片切换上一张 * 2.2点击右按钮,图片切换下一张 * ...
- android-auto-scroll-view-pager (无限广告轮播图)
github 地址: https://github.com/Trinea/android-auto-scroll-view-pager Gradle: compile ('cn.trinea.andr ...
- swift bannerview 广告轮播图
class BannerView: UIView,UIScrollViewDelegate{ //图⽚⽔平放置到scrollView上 private var scrollView:UIScrollV ...
- swift 广告轮播图
import UIKit import Kingfisher class BannerView: UIView,UIScrollViewDelegate{ enum ImageType{ case I ...
- Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View
最近开发中需要做一个类似京东首页那样的广告轮播效果,于是采用ViewPager自己自定义了一个轮播图效果的View. 主要原理就是利用定时任务器定时切换ViewPager的页面. 效果图如下: 主页面 ...
随机推荐
- U-boot 启动内核
1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU不能直接从块设备中执行代码,需要把块设备中的程序复制到内存中,而复制之前还需要进行很多初始化工作, ...
- scala细节
在高版本中,scala使用了自己的String,而不是java.lang.String 字符串转数字:"33.4".toDouble "33.4".toF ...
- 浏览器下载img标签Base64图片
https://blog.csdn.net/qq_42076140/article/details/82113622 原文地址 <a href="javascript:downl ...
- FSM之三--代码风格
FSM设计之一http://www.cnblogs.com/qiweiwang/archive/2010/11/28/1890244.html Moore型状态机与mealy型状态机相比,由于其状态输 ...
- php实现简单算法1
php实现简单算法1 <? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) functio ...
- 比较两个文件是否相同(C/C++语言)
#include <stdio.h> #include <string.h> ; // Calculate the file size void Get_file_size(c ...
- 配置CiscoWorks 2000 ANI同步
配置CiscoWorks 2000 ANI同步 在CiscoWorks 2000的LAN ManagementSolution(LMS)中,Cisco包含了一种ANI的自动发现过程和Res ...
- 目前常见的三种SQL分页方式:
--top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id from tablename) - ...
- Debian9.5 VNC Server远程桌面配置
VNC概述 VNC (Virtual Network Console)是虚拟网络控制台的缩写.VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 ...
- 用vuex构建单页
原文地址:点我 前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章.感觉收获挺多,自己在它的例子的基础上进行了一些优化和 ...