欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发之滑动图片轮播标题焦点

程序员文章站 2024-02-29 16:36:04
先给大家这是下效果图: 谷歌提供的v4包,viewpager 在布局文件中,先添加

先给大家这是下效果图:

Android开发之滑动图片轮播标题焦点

谷歌提供的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.v.view.pageradapter;
import android.support.v.view.viewpager;
import android.support.v.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[]{
"新闻标题",
"新闻标题",
"新闻标题"
};
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 img = new imageview(this);
img.setimageresource(r.drawable.a);
banners.add(img);
imageview img = new imageview(this);
img.setimageresource(r.drawable.b);
banners.add(img);
imageview img = new imageview(this);
img.setimageresource(r.drawable.c);
banners.add(img);
//小图标
ll_points=(linearlayout) findviewbyid(r.id.ll_points);
for(int i=;i<banners.size();i++){
imageview image=new imageview(this);
image.setimageresource(r.drawable.point_selector);
linearlayout.layoutparams params=new linearlayout.layoutparams(, );
params.rightmargin=;
image.setlayoutparams(params);
ll_points.addview(image);
if(i==){
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 arg) {
tv_title.settext(titles[arg]);
//小图标处理
for(imageview point:points){
point.setenabled(false);
}
points.get(arg).setenabled(true);
}
@override
public void onpagescrolled(int arg, float arg, int arg) {
// todo auto-generated method stub
}
@override
public void onpagescrollstatechanged(int arg) {
// 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 arg, object arg) {
return arg == arg;
}
}
}

以上所述是小编给大家介绍的android开发之滑动图片轮播标题焦点的相关知识,希望对大家有所帮助!