1.我们来设计flash_slide.xml 布局,这个xml主要做成模块化,方便其它的activity可以动态去调用。

flash_slide.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.v4.view.ViewPager
android:id="@+id/flash_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:gravity="center"

android:background="#000000"

>

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/dot_focus"

/>

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/dot_blur"

android:layout_marginLeft="6dp"

/>

  </LinearLayout>

</RelativeLayout>

效果如图:

现在,我们开始建立对应的代码,新建一个com.yushengbo.widget包,在此包下,建立一个继承自FrameLayout的自定义的View类。

package com.yushengbo.widget;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.yushengbo.flashdemo.R;

public class FlashSlide extends FrameLayout {

	private List<ImageView> circleDotList; //原點
	private List<ImageView> imgagesList; //圖片
	private int[] resouceIds = {
			R.drawable.flash1,
			R.drawable.flash2,
			R.drawable.flash3,
			R.drawable.flash4,
			R.drawable.flash5 };

	private int curItemIndex=0; //當前選中的圖片

    //定时任务
    private ScheduledExecutorService scheduledExecutorService;

	private ViewPager viewPager;
	private Context context;

	public FlashSlide(Context context) {

		this(context,null);

	}

	public FlashSlide(Context context, AttributeSet attrs) {
		this(context, attrs,0);
	}

	public FlashSlide(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);

		this.context = context;

		InitUi();
		startPlay();
	}

	void InitUi()
	{          //加载布局
		LayoutInflater.from(context).inflate(R.layout.flash_slide, this,true);

		LinearLayout dotLayout = (LinearLayout)findViewById(R.id.dotLayout);
		dotLayout.removeAllViews();

		imgagesList = new ArrayList<ImageView>();
		circleDotList = new ArrayList<ImageView>();
		//装载图片和圆点
		for(int i=0;i<resouceIds.length;i++)
		{
			ImageView iv = new ImageView(context);
			iv.setImageResource(resouceIds[i]);

			ImageView ic= new ImageView(context);
			ic.setTag(i);
			if(i==0)
			{
				ic.setImageResource(R.drawable.dot_focus);
			}
			else
			{
				ic.setImageResource(R.drawable.dot_blur);
			}

			imgagesList.add(iv);
		   //设置圆点间距
		    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
				   (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

			params.leftMargin = 5;

			dotLayout.addView(ic,params);

			circleDotList.add(ic);
		}

		//初始化ViewPager
		viewPager = (ViewPager)findViewById(R.id.flash_content);
		viewPager.setCurrentItem(curItemIndex);         //设定适配器
		viewPager.setAdapter(new FlashPageAdapter());           //设定监听器
		viewPager.setOnPageChangeListener(new MyPageChangeListener());

	}

	  /**
     * 开始轮播图切换
     */
    private void startPlay(){
        scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.scheduleAtFixedRate(new MyThread(), 1, 4, TimeUnit.SECONDS);
    }

	class FlashPageAdapter extends PagerAdapter
	{

		@Override
		public int getCount() {

			return imgagesList.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {

			return arg0 == arg1;
		}

		@Override
		public void destroyItem(View container, int position, Object object) {
			((ViewPager)container).removeView(imgagesList.get(position));
		}

		@Override
		public Object instantiateItem(View container, int position) {

			((ViewPager)container).addView(imgagesList.get(position),LayoutParams.MATCH_PARENT
					, LayoutParams.MATCH_PARENT);

			return ((ViewPager)container).getChildAt(position);
		}

	}

	class MyPageChangeListener implements OnPageChangeListener
	{

		@Override
		public void onPageScrollStateChanged(int arg0) {

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {

		}

		@Override
		public void onPageSelected(int arg0) {
			curItemIndex = arg0;
			viewPager.setCurrentItem(arg0);
			LinearLayout dotLayout = (LinearLayout)findViewById(R.id.dotLayout);

			for(int i=0;i<circleDotList.size();i++)
			{
				ImageView iv = (ImageView) dotLayout.findViewWithTag(i);
				if(i==arg0)
				{
					iv.setImageResource(R.drawable.dot_focus);
				}
				else
				{
					iv.setImageResource(R.drawable.dot_blur);
				}
			}

		}

	}

	Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			viewPager.setCurrentItem(msg.what);
		}
	};

	class MyThread implements Runnable
	{
		@Override
		public void run() {
			Message msg = handler.obtainMessage();
			curItemIndex = (curItemIndex+1)%imgagesList.size();
			msg.what = curItemIndex;
			handler.sendMessage(msg);
		}

	}

}

最终效果图:


  转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任! 

淘宝(阿里百川)手机客户端开发日记第二篇 android首页之顶部轮播特效制作 (二)的更多相关文章

  1. 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)

    android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比  转载请注明http://w ...

  2. 淘宝(阿里百川)手机客户端开发日记第九篇 Looper详解

    public final class Looper: 官方的API: Class used to run a message loop for a thread. Threads by default ...

  3. 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)

    解析一个从淘宝传递的JSON (大家如有兴趣可以测试下):{ "tae_item_detail_get_response": { "data": { " ...

  4. 淘宝(阿里百川)手机客户端开发日记第十二篇 mysql的认识

    我这里用的是wamp,大家可以到网上去下载对应的包,自行安装,对于程序员来讲,安装软件大部分都应该不是问题的,所以我不去将具体安装的方法. wamp安装好后,在我们屏幕的右下角, 这样的图标,我们右键 ...

  5. 淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet

    由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器 ...

  6. 淘宝(阿里百川)手机客户端开发日记第十四篇 jsp提交含有上传控件表单乱码问题

    今天我来总结昨天开发的一个简单的jsp web 应用程序时,在做一个调教表单,从servlet端获取数据,这个表单里含有上传文件控件.如果我们在测试的时候,获取数据的是乱码,这时,大家可以先去掉上传控 ...

  7. 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解

    我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...

  8. 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)

    个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...

  9. 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接

    首先,我建立了一个包,里面存放了三个类文件,这三个文件是我从网络中找的,经过自己的整理.(我刚才查找想把这三个文件传上去,可能是自己对cnblogs的博客不太熟悉吧,没有找到,我只好粘贴代码了) 三个 ...

随机推荐

  1. Java链式编程接口

    在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...

  2. 软工实践练习一——使用Git进行代码管理心得

    在github.com的操作 注册 创建Organization 将指定代码库fork到小组Organization下 在Organization下创建repository 这些操作在学校的机房已经完 ...

  3. Oracle添加数据文件创建表空间,创建用户代码

    1,添加数据文件创建表空间 CREATE TABLESPACE "TEST1" DATAFILE 'D:\ORACLE\11G\ORADATA\ORCL\TEST1.DBF' SI ...

  4. codevs 1378选课 树形DP

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],tr[] ...

  5. poj 3669 线段树成段更新+区间合并

    添加 lsum[ ] , rsum[ ] , msum[ ] 来记录从左到右的区间,从右到左的区间和最大的区间: #include<stdio.h> #define lson l,m,rt ...

  6. str和repr的

    尽管str(),repr()和``运算在特性和功能方面都非常相似,事实上repr()和``做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算(使用内 ...

  7. Recon-Erlang线上系统诊断工具

    Erlang系统素以稳定可靠闻名,但是它也是c实现的,也是要管理比如内存,锁等等复杂的事情,也会出现Crash,而且crash的时候大部分原因是因为内存问题.为此erlang运行期提供了强大的自省机制 ...

  8. SmartImageView&常见的开源代码

    1)说明: 该控件实现图片的显示----网络路径也可以显示出来---加载完成之后 就可以 缓存到内存里面!

  9. c3p0配置详解

    数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理. 一.实现方式: C3P0有三种方式实现: 1.自己动手写代码,实现数据源 例如: ...

  10. 初学JDBC,JDBC工具类的简单封装

    //工具类不需要被继承 public final class JdbcUtils{ //封装数据库连接参数,便于后期更改参数值 private static String url="jdbc ...