Android 轮播
来源:互联网 发布:人工智能行业分析 编辑:程序博客网 时间:2024/05/21 10:27
使用的控件是viewpager
布局结构
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="210dp" >
<com.example.study_viewpager.CustomViewPager
android:id="@+id/vp_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.example.study_viewpager.CustomViewPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:background="@android:color/darker_gray"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:padding="2dp"
android:text="中国人名站起来了"
android:textColor="@android:color/white" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
<View
android:id="@+id/view_01"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@drawable/point_fouce" />
<View
android:id="@+id/view_02"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@drawable/point_nomal" />
<View
android:id="@+id/view_03"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@drawable/point_nomal" />
<View
android:id="@+id/view_04"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@drawable/point_nomal" />
<View
android:id="@+id/view_05"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@drawable/point_nomal" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
CustomViewPager 这个可以直接用v4包的viewpager替换
这是 实现的代码
package com.example.study_viewpager;
import java.util.ArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
/**
* 实现轮播效果
*
* @author An
*
*/
public class MainActivity extends Activity {
/*
* 设置的背景图片*
*/
private int[] imageId = new int[] { R.drawable.a, R.drawable.b,
R.drawable.c, R.drawable.d, R.drawable.e };
/**
* 设置的图片的title
*/
private String strTitle[] = new String[] { "刘丽来了", " 琉璃来了 ", "浏览来了",
"流量来了", "流离来了" };
/** 用来存放ImageView对象的 */
private ArrayList<ImageView> imageViews;
/** Viewpager对象 */
private CustomViewPager viewPager;
/** 这个主要是图片切换时候的圆点背景变换 */
private ArrayList<View> pointArray;
/** 记录上一个点的位置 */
private int lastPosition;
/** 文字描叙 */
private TextView tvTitle;
/** 记录当前的位置 */
private int currentPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
}
private void initData() {
// 初始化结合对象
imageViews = new ArrayList<>();
for (int i = 0; i < imageId.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(imageId[i]);
imageViews.add(imageView);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, strTitle[currentPosition], 1).show();
}
});
}
pointArray = new ArrayList<View>();
pointArray.add(findViewById(R.id.view_01));
pointArray.add(findViewById(R.id.view_02));
pointArray.add(findViewById(R.id.view_03));
pointArray.add(findViewById(R.id.view_04));
pointArray.add(findViewById(R.id.view_05));
viewPager = (CustomViewPager) findViewById(R.id.vp_viewpager);
tvTitle = (TextView) findViewById(R.id.tv_title);
ViewPagerAdapter adapter = new ViewPagerAdapter();
// 类似listview 设置一个adapter
viewPager.setAdapter(adapter);
viewPager.setPageTransformer(true, new PageTransformer() {
@Override
public void transformPage(View arg0, float arg1) {
// TODO Auto-generated method stub
}
});
// 图片切换的过程
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// 图片切换的时候页面的
pointArray.get(arg0).setBackgroundResource(
R.drawable.point_fouce);
pointArray.get(lastPosition).setBackgroundResource(
R.drawable.point_nomal);
lastPosition = arg0;
tvTitle.setText(strTitle[arg0]);
currentPosition = arg0;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
private class ViewPagerAdapter extends PagerAdapter {
// 和baseadapter类似的
@Override
public int getCount() {
return imageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
// 移除一个对象
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageViews.get(position));
}
// 添加一个对象
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(imageViews.get(position));
return imageViews.get(position);
}
}
@Override
protected void onStart() {
super.onStart();
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(new ViewPagerTask(), 2, 4,
TimeUnit.SECONDS);
}
@Override
protected void onStop() {
super.onStop();
}
// 计时器 Timer坏处 是一个基于绝对时间 ,而不是基于相对时间,所以启动一个线程池任务去完成计时
private class ViewPagerTask implements Runnable {
@Override
public void run() {
// 当跳转到下一个位置的时候 重新计算位置 例如当前是 3 ,+1 = 4,
currentPosition = (currentPosition + 1) % imageViews.size();
// 主线程更新界面
runOnUiThread(new Runnable() {
public void run() {
viewPager.setCurrentItem(currentPosition);
}
});
}
}
}
这里面的图片是本地的,网络的也可以实现替换
当然还可以给图片的切换提供各种动画 viewpager 中有个setPageTransformerset(arg0 ,arg1), 网上有很多这方面的例子可以查看
- Android轮播广告栏
- Android图片轮播
- Android 轮播
- Android 图片轮播
- android图片轮播
- android 轮播
- Android TextView轮播
- Android图片轮播
- android 图片轮播
- android-大图轮播
- android 图片轮播
- Android轮播广告
- android 图片轮播
- Android图片轮播
- Android轮播实现
- Android广告轮播
- Android 图片轮播
- Android 文字轮播
- Ubuntu12.04 Python Django 安装
- 括号匹配
- email输入的提交验证
- inet_aton和inet_network和inet_addr三者比较
- 解决标题栏返回上一级Activity无效
- Android 轮播
- HDU-1204-糖果大战(听说用到Markov process!)
- 程序员的四种类型
- xcode升级后的常见错误及解决方法总结
- JAVA反射机制
- LeetCode - Generate Parentheses
- 第六周项目1.1 深复制体验——补充注释
- rsync+inotify实现服务器之间文件实时同步
- 手机尾号打分