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. session和cookie的前后的操作

    1. // sign outexports.signout = function (req, res, next) { req.session.destroy(); res.clearCookie(c ...

  2. Unknown column '' in 'field list'解决方案

    很多人在用php+MySQL做网站往数据库插入数据时发现如下错误: 注册失败!Unknown column '1a' in 'field list' 结果发现用数字提交是没有问题的,其他如char型就 ...

  3. php字符串比较函数

    比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说就是前者强调“identical”类型也要求 一样:后者要求“equal”,值相同就可以了,参考[1].或 ...

  4. 读MBE

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Java设计模式-装饰模式(Decorator)

    顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个 ...

  6. js弹出窗口总结6种弹窗方法

    注: //关闭,父窗口弹出对话框,子窗口直接关闭 this.Response.Write("<script language=javascript>window.close(); ...

  7. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析

    上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 ...

  8. 【poj1962】 Corporative Network

    http://poj.org/problem?id=1962 (题目链接) 时隔多年又一次写带权并查集. 题意 n个节点,若干次询问,I x y表示从x连一条边到y,权值为|x-y|%1000:E x ...

  9. poj 3463 最短路与次短路&&统计个数

    题意:求最短路和比最短路长度多1的次短路的个数 本来想图(有)方(模)便(版)用spfa的,结果妹纸要我看看dijkstra怎么解.... 写了三遍orz Ver1.0:堆优化+邻接表,WA //不能 ...

  10. OPENSSL编程入门学习

    相关学习资料 http://bbs.pediy.com/showthread.php?t=92649 https://www.openssl.org https://www.google.com.hk ...