码迷,mamicode.com
首页 > 其他好文 > 详细

自定义控件---系统控件组合式(案例二)

时间:2015-03-06 22:15:38      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:


-----------------------------------------------案例效果-------------------------------------

技术分享

activity_main.xml

<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/viewPager"
        android:layout_width="match_parent"
        android:layout_height="200dip" />

    <LinearLayout
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/viewPager"
        android:background="#44000000"
        android:orientation="vertical" >

        <TextView
            android:singleLine="true"
            android:id="@+id/tv_msg"
            android:textColor="#ffffff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="武媚娘传奇"
            android:textSize="18sp" />

        <LinearLayout
            android:id="@+id/ll_point_group"
            android:padding="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>
drawable目录下有三个xml文件
point_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="false" android:drawable="@drawable/normal_point"></item>
    <item android:state_enabled="true" android:drawable="@drawable/focused_point"></item>

</selector>
normal_point.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    
    <size android:width="10dip" android:height="10dip"/>
    <solid android:color="#55000000"/>

</shape>
focused_point.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <!-- 椭圆 -->
    <size android:width="10dip" android:height="10dip"/>
    <solid android:color="#66ffffff"/>

</shape>

MainActivity.java

package com.atguigu.myviewpager;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity {
	// viewPager继承viewGroup
	private ViewPager viewPager;
	private TextView tv_msg;
	// 显示当前页的圆点标志布局视图
	private LinearLayout ll_point_group;

	/**
	 * 图片的int数组集合 图片标题集合 图片集合
	 */
	private int[] ids = { R.drawable.a, R.drawable.b, R.drawable.c,
			R.drawable.d, R.drawable.e };
	private final String[] imageDescriptions = { "巩俐不低俗,我就不能低俗",
			"朴树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };
	private ArrayList<ImageView> imageViews;

	// 上一次被高亮显示的位置
	private int lastIndex = 0;

	// 是否已经执行了Activity中的onDestroy true:执行 false:没有执行
	private boolean isDestroy = false;;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 获取viewPager
		viewPager = (ViewPager) findViewById(R.id.viewPager);
		// 获取图片说明
		tv_msg = (TextView) findViewById(R.id.tv_msg);
		// 获取圆点线性布局
		ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);

		/**
		 * 准备需要的数据 1、初始化圆点集合数据 2、获取图片集合数据
		 */
		imageViews = new ArrayList<ImageView>();
		for (int i = 0; i < ids.length; i++) {
			// 1、实例化图片,并且设置背景
			ImageView imageView = new ImageView(this);
			imageView.setBackgroundResource(ids[i]);
			// 把图片添加到集合中
			imageViews.add(imageView);

			// 2、设置圆点图片背景
			ImageView iv_point = new ImageView(this);
			iv_point.setBackgroundResource(R.drawable.point_bg);
			// 导入的包应该是父类的参数
			LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
					LayoutParams.WRAP_CONTENT);
			iv_point.setLayoutParams(params);
			// 圆点之间有距离
			params.leftMargin = 10;
			// 默认第一个圆点是高亮显示(第一个图片被选中)
			if (i == 0) {
				iv_point.setEnabled(true);
			} else {
				iv_point.setEnabled(false);
			}
			ll_point_group.addView(iv_point);
		}
		/**
		 * 创建并且设置适配器
		 */
		MyPagerAdapter adapter = new MyPagerAdapter();
		viewPager.setAdapter(adapter);
		// ????
		int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2
				% imageViews.size();
		// 22->11
		Log.e("TAG",item+"-----" );
		// 设置为中间????
		viewPager.setCurrentItem(item);

		// 设置默认文本信息
		String msg = imageDescriptions[0];
		tv_msg.setText(msg);

		// 监听页面改变
		viewPager.setOnPageChangeListener(new OnPageChangeListener() {

			/**
			 * 当选择某个页面的时候回调 position:把选择的位置传过来
			 */
			@Override
			public void onPageSelected(int position) {

				int myposition = position % imageViews.size();
				// 根据位置取出对应的文本
				String msg = imageDescriptions[myposition];
				tv_msg.setText(msg);

				ll_point_group.getChildAt(lastIndex).setEnabled(false);
				ll_point_group.getChildAt(myposition).setEnabled(true);
				lastIndex = myposition;

			}

			/**
			 * 当页面滑动了或者滚动了的时候,回调这个方法 position:页面的下标 positionOffset:滑动的页面比
			 * positionOffsetPixels:滑动了多少的像素
			 */
			@Override
			public void onPageScrolled(int position, float positionOffset,
					int positionOffsetPixels) {
			}

			/**
			 * 当页面滑动状态发送变化的时候回调这个方法
			 */
			@Override
			public void onPageScrollStateChanged(int state) {
			}
		});

		// 发消息开始自动切换图片
		isDestroy = false;
		// 一加载页面,就先发一个3秒延迟消息
		handler.sendEmptyMessageDelayed(0, 3000);
	}

	/*
	 * handler
	 */
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {

			// 切换到下一个页面
			viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
			// 循环显示图片-不断切换
			if (true) {
				// 每隔4秒图片切换一下-自己本身处理消息
				handler.sendEmptyMessageDelayed(0, 4000);
			}
		};
	};

	/**
	 * 退出应用
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		isDestroy = true;
	}

	/**
	 * 适配器类
	 */
	class MyPagerAdapter extends PagerAdapter {
		// 得到数据的总条数
		@Override
		public int getCount() {
			return Integer.MAX_VALUE;
		}

		// 相当于:getView(); container:就是一个容器,就是ViewPager
		// position:位置下标
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			// 根据位置得到具体的页面
			Log.e("TAG",position+"" );
			Log.e("TAG",position % imageViews.size()+"" );
			ImageView imageView = imageViews.get(position % imageViews.size());
			// 把图片添加到ViewPager里面
			container.addView(imageView);
			return imageView;
		}

		/**
		 * 比较view是否是由instantiateItem所实例化的 view 当前页面 object:instantiateItem方法返回的值
		 */
		@Override
		public boolean isViewFromObject(View view, Object object) {
			return view == object;
		}

		/**
		 * 根据位置移除对应的被销毁的控件
		 */
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView((View) object);
		}
	}
}


自定义控件---系统控件组合式(案例二)

标签:

原文地址:http://blog.csdn.net/u013210620/article/details/44105803

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!