谷歌提供的v4包,ViewPager

在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,这个只是轮播的区域

在布局文件中,布置标题描述部分

线性布局,竖向排列,背景色黑色半透明,这个布局和上面的ViewPager底部对齐layout_alignBottom=”@id/xxx”

<TextView/>居中显示,

小点部分,先放过空的LinearLayout,id是ll_points在代码中对其进行填充

获取ViewPager对象

调用ViewPager对象的setAdapter()方法,参数:PagerAdapter对象

因为PagerAdapter是抽象类,定义一个MyPagerAdapter继承PagerAdapter,实现以下方法

重写getCount()方法,返回轮播的个数

重写isViewFromObject()方法,返回布尔值,

重写instantiateItem()方法,将当前view对象添加到ViewGroup对象,返回当前对象

重写destroyItem()方法,从当前container中删除指定位置(position)的View

切换描述标题字符串

定义一个String[]数组,保存标题

调用ViewPager对象的setOnPagerChangeListener()方法,参数:OnPagerChangeListener对象

匿名内部类实现,重写以下方法

onPageSelected()方法,页面切换后调用,传递进参数,int索引

onPageScrolled()方法,当页面正在滚动的时候

onPageScrollStateChanged()方法,当页面滚动状态改变的时候

小图标部分

新建两个shape文件,使用xml画两个原点

添加节点<shape>,设置形状为原型android:shape=”oval”

添加尺寸节点<size> ,设置宽度,高度,android:width=”” android:height=””

添加颜色节点<solid>,设置颜色 android:color=””

正常情况下,灰色点,焦点的时候,白色的点,两个xm文件的颜色不一样

point.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" > <size
android:height="4dp"
android:width="4dp" />
<solid android:color="#aaffffff"/> </shape>

point_write.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" > <size
android:height="4dp"
android:width="4dp" />
<solid android:color="#ffffffff"/> </shape>

新建一个selector文件,当图片enable的时候白色的点,不可用的时候灰色的点,不同的状态不同的图片

添加<selector>节点

添加<item>节点,设置图片属性android:drawable=”” 设置状态android:enabled=”true|false”

point_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/point" android:state_enabled="false"></item>
<item android:drawable="@drawable/point_write" android:state_enabled="true"></item>
</selector>

循环大图片的个数,创建ImageView对象,

调用ImageView对象setImageResource()方法,设置资源,参数:selector文件

调用ImageView对象的setLayoutParams()方法,给小图标ImageView对象添加一些margin值,参数:LayoutParams对象,获取LinearLayout.LayoutParams对象,调用LayoutParams对象的rightMargin()方法,设置margin值

调用ImageView对象的setEnabled()方法,设置是否可用,参数:布尔值

获取LinearLayout对象,调用LinearLayout对象的addView()方法,把小图标的视图填进去,参数:ImageView对象

默认第一个是焦点,随着图片滑动,焦点跟着改变

package com.tsh.myviewpager;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
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.TextView; public class MainActivity extends Activity {
private ViewPager vp_banner;
private LinearLayout ll_points;
private TextView tv_title;
private List<View> banners;
private String[] titles=new String[]{
"新闻标题1",
"新闻标题2",
"新闻标题3"
};
private List<ImageView> points=new ArrayList<ImageView>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化
vp_banner = (ViewPager) findViewById(R.id.vp_banner);
ll_points = (LinearLayout) findViewById(R.id.ll_points);
tv_title = (TextView) findViewById(R.id.tv_title); // banner部分
banners = new ArrayList<>();
ImageView img1 = new ImageView(this);
img1.setImageResource(R.drawable.a);
banners.add(img1);
ImageView img2 = new ImageView(this);
img2.setImageResource(R.drawable.b);
banners.add(img2);
ImageView img3 = new ImageView(this);
img3.setImageResource(R.drawable.c);
banners.add(img3); //小图标
ll_points=(LinearLayout) findViewById(R.id.ll_points);
for(int i=0;i<banners.size();i++){
ImageView image=new ImageView(this);
image.setImageResource(R.drawable.point_selector);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(5, 5);
params.rightMargin=4;
image.setLayoutParams(params);
ll_points.addView(image);
if(i==0){
image.setEnabled(true);
}else{
image.setEnabled(false);
}
points.add(image);
} // 设置适配器
vp_banner.setAdapter(new MyPagerAdapter());
vp_banner.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
tv_title.setText(titles[arg0]);
//小图标处理
for(ImageView point:points){
point.setEnabled(false);
}
points.get(arg0).setEnabled(true);
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
});
} private class MyPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(banners.get(position));
} @Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(banners.get(position));
return banners.get(position);
} @Override
public int getCount() {
return banners.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}

[android] 轮播图-滑动图片标题焦点的更多相关文章

  1. 029 Android 轮播图广告Banner开源框架使用

    1.Banner介绍 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能. 2.使用环境配置(具体可见github开源项目) (1)添加依赖 在build.gradl ...

  2. android 轮播图

    轮播图是很常用的一个效果 核心功能已经实现 没有什么特殊需求 自己没事研究的 所以封装的不太好 一些地方还比较糙 为想要研究轮播图的同学提供个参考 目前测试图片为mipmap中的图片 没有写从网络加载 ...

  3. Android轮播图

    轮播图是很常用的一个效果 核心功能已经实现 没有什么特殊需求 自己没事研究的 所以封装的不太好 一些地方还比较糙 为想要研究轮播图的同学提供个参考目前测试图片为mipmap中的图片 没有写从网络加载图 ...

  4. Android 轮播图Banner切换图片的效果

    Android XBanner使用详解 2018年03月14日 08:19:59 AND_Devil 阅读数:910   版权声明:本文为博主原创文章,未经博主允许不得转载. https://www. ...

  5. Android轮播图Banner的实现

    从慕课网上学了一门叫做“不一样的自定义实现轮播图效果”的课程,感觉实用性较强,而且循序渐进,很适合初学者.在此对该课程做一个小小的笔记. 实现轮播思路: 1.一般轮播图是由一组图片和底部轮播圆点组成, ...

  6. android轮播图的实现原理

    1.轮播图的点:RadioGroup,根据网络请求的数据,解析得到的图片的个数,设置RadioGroup的RadioButton的个数. 2.轮播图的核心技术:用Gallery来存放图片,设置适配器. ...

  7. [android] 轮播图-无限循环

    实现无限循环 在getCount()方法中,返回一个很大的值,Integer.MAX_VALUE 在instantiateItem()方法中,获取当前View的索引时,进行取于操作,传递进来的int ...

  8. photoSlider-原生js移动开发轮播图、相册滑动插件

    详细内容请点击 在线预览   立即下载 使用方法: 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css& ...

  9. photoSlider-html5原生js移动开发轮播图-相册滑动插件

    简单的移动端图片滑动切换浏览插件 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" hre ...

随机推荐

  1. .Net 持续集成 —— windows service

    上一篇讲了 Jenkins+WebDeploy+IIS完成 web项目部署,这篇继续讲windows service的部署. windows service 一般用于自动任务,定时完成某些操作.本文自 ...

  2. [转载]SystemD strikes again : Unit X.mount is bound to inactive unit

    http://mamchenkov.net/wordpress/2017/11/09/systemd-strikes-again-unit-var-whatever-mount-is-bound-to ...

  3. dubbo实现原理之动态编译

    Dubbo为了实现基于spi思想的扩展特性,特别是能够灵活添加额外功能,对于扩展或则策略选择的设配类能够动态生成.对于一些需求已知的类如Protocal,它们的设配类代码dubbo可以直接的提供,但是 ...

  4. Caffe 使用记录(一)mnist手写数字识别

    1. 运行它 1. 安装caffe请参考 http://www.cnblogs.com/xuanyuyt/p/5726926.html  此例子在官网 http://caffe.berkeleyvis ...

  5. postgresql和redis

    redis 和postgresql区别以及其优缺点 一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾. 那么,经过周密的计算,一瞬间为0.36 秒, ...

  6. python学习笔记16-装饰器

    装饰器(函数) 1.函数作用域 2.高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 3.闭包  闭包就是能够读取其他函数内部变量的函数. 在本质上,闭包 ...

  7. java filter过滤器及责任链设计模式

    什么是Filter? Filter属于sevlet规范,翻译为过滤器. Filter在web开发中有什么作用? 案例一:一个web站点只有用户登录才能继续访问该站点的资源,那么需要用户每次访问都判断是 ...

  8. [原创]K8飞刀 新增Acunetix WVS 远程漏洞 反制黑客

    工具: K8飞刀20150603组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2015/6/3 20:41:29 简介: ...

  9. Docker三剑客之Docker Compose

    一.什么是Docker Compose Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/comp ...

  10. spring + mybatis 存取clob

    存的时候会比较麻烦,需要使用select for update的方式更新数据,如果原来没有这一条数据,还需要先新增,新增的时候需要将clob字段存为oracle.sql.CLOB.empty_lob( ...