谷歌提供的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. 【npm】利用npm安装/删除/发布/更新/撤销发布包

      什么是npm? npm是javascript的包管理工具,是前端模块化下的一个标志性产物 简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率   1.从社区的角度:把针对某一特定问题 ...

  2. Android开发教程 - 使用Data Binding(五)数据绑定

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  3. 《Python自动化运维之路》 系统基础信息模块(一)

    系统性能收集模块Psutil 目录: 系统性能信息模块psutil 系统性能信息模块psutil psutil能够轻松实现获取系统运行的进程和系统利用率包括(CPU,内存,磁盘 和网络)等.主要用于系 ...

  4. 编译lua-5.3.5时出错解决方法

    问题描述: 执行 make linux test 过程出现错误,错误信息如下: “ lua.c:82:31: fatal error: readline/readline.h: No such fil ...

  5. abp 使用 hangfire结合mysql

    abp 官方使用的hangfire 默认使用的是sqlserver的存储 需要引入支持mysql的类库 我这边使用的是Hangfire.MySql.Core 直接用nuget安装即可 首先按照官方文档 ...

  6. 弹出AlertDialog的时候报You need to use a Theme.AppCompat theme (or descendant) with this activity错误

    今天遇到一个bug,用百度地图的时候,我对上面的标注设置了点击监听,设置的相应的反应是弹出一个AlertDialog 记录一解决bug的历程 但是Dialog却没有弹出来,一看AS下面,报了这错,起初 ...

  7. Windows+MyEclipse+MySQL【连接数据库报错caching_sha2_password】

    在MyEclipse中打开[窗口]->[显示视图]-> MyEclipse Database Browser -> (图片里倒三角)New.... ①Driver template: ...

  8. getFields和getDeclaredFields

    getFields()获得某个类的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced, ...

  9. print默认在末尾添加一个换行符,但其实也可以不用!

    白月黑羽今天给大家分享另外一个冷知识:) python中 print函数打印信息时默认添加一个换行符,所以你看到一条print语句,则单独占一行,那是否可以不要换行符呢? 答案是肯定的,当然可以,可用 ...

  10. 分享 : 警惕MySQL运维陷阱:基于MyCat的伪分布式架构

    分布式数据库已经进入了全面快速发展阶段.这种发展是与时俱进的,与人的需求分不开,因为现在信息时代的高速发展,导致数据量和交易量越来越大.这种现象首先导致的就是存储瓶颈,因为MySQL数据库实质上还是一 ...