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

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

时间:2015-03-06 22:16:56      阅读:144      评论: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" >

    <RelativeLayout
        android:id="@+id/level3"
        android:layout_width="280dip"
        android:layout_height="140dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/level3" >

        <ImageView
            android:id="@+id/channel4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="5dip"
            android:src="@drawable/channel4" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/level2"
        android:layout_width="180dip"
        android:layout_height="90dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/level2" >

        <ImageView
            android:id="@+id/icon_menu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="6dip"
            android:src="@drawable/icon_menu" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/level1"
        android:layout_width="100dip"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/level1" >

        <ImageView
            android:id="@+id/icon_home"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:src="@drawable/icon_home" />
    </RelativeLayout>

</RelativeLayout>
MainActivity.java

package com.atguigu.youkmenudemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements OnClickListener {

	// 一级列表
	private ImageView icon_home;
	// 二级列表
	private ImageView icon_menu;

	private RelativeLayout level1;
	private RelativeLayout level2;
	private RelativeLayout level3;
	// 标石一二三级列表是否显示
	private boolean isShowlevel3 = true;
	private boolean isShowlevel2 = true;
	private boolean isShowlevel1 = true;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		icon_home = (ImageView) findViewById(R.id.icon_home);
		icon_menu = (ImageView) findViewById(R.id.icon_menu);
		level1 = (RelativeLayout) findViewById(R.id.level1);
		level2 = (RelativeLayout) findViewById(R.id.level2);
		level3 = (RelativeLayout) findViewById(R.id.level3);
		// 设置点击监听
		icon_home.setOnClickListener(this);
		icon_menu.setOnClickListener(this);

	}

	/*
	 * 点击事件
	 */
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		//如果点击一级列表,如果二级列表显示就将其隐藏,如果三级列表显示就将其隐藏
		case R.id.icon_home:
			if (isShowlevel2) {
				Tools.hipeView(level2);
				isShowlevel2 = false;
				if (isShowlevel3) {
					//三级列表隐藏动画延迟效果
					Tools.hipeView(level3, 200);
					isShowlevel3 = false;
				}
			} else {
				//如果二级列表隐藏就将其显示出来
				Tools.showView(level2);
				isShowlevel2 = true;
			}
			break;
		//如果点击二级列表,如果三级列表显示就将其隐藏,如果三级列表隐藏就将其显示
		case R.id.icon_menu:

			if (isShowlevel3) {
				Tools.hipeView(level3);
				isShowlevel3 = false;
			} else {
				Tools.showView(level3);
				isShowlevel3 = true;
			}

			break;

		default:
			break;
		}
	}
	/**
	 * 按键事件
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		//如果一级列表显示就将其隐藏,如果二级列表显示就将其隐藏,如果三级列表显示就将其隐藏
		if (keyCode == KeyEvent.KEYCODE_MENU) {
			if (isShowlevel1) {
				Tools.hipeView(level1);
				isShowlevel1 = false;
				if (isShowlevel2) {
					//二级列表比一级列表滞后
					Tools.hipeView(level2, 200);
					isShowlevel2 = false;
					if (isShowlevel3) {
						//三级列表比二级列表滞后
						Tools.hipeView(level3, 400);
						isShowlevel3 = false;
					}
				}
			} else {
				//如果一级列表隐藏就将其显示,
				Tools.showView(level1);
				isShowlevel1 = true;
				//如果二级列表隐藏就将其显示(比一级滞后)
				Tools.showView(level2, 200);
				isShowlevel2 = true;
			}

			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}

Tools.java

package com.atguigu.youkmenudemo;

import android.view.View;
import android.view.ViewGroup;
import android.view.animation.RotateAnimation;

/**
 * 隐藏和显示各级菜单的工具类
 */
public class Tools {
	public static void hipeView(ViewGroup view) {
		hipeView(view, 0);
	}

	public static void showView(ViewGroup view) {
		showView(view, 0);
	}

	public static void hipeView(ViewGroup view, int startOffset) {
		RotateAnimation ra = new RotateAnimation(0, 180, view.getWidth() / 2,
				view.getHeight());
		// 设置动画的播放时间
		ra.setDuration(500);
		// 延迟多长时间开始播放
		ra.setStartOffset(startOffset);
		// 停留在动画播放后的状态
		ra.setFillAfter(true);
		view.startAnimation(ra);
		int childCount = view.getChildCount();
		//遍历所有的孩子,把每个孩子设置为不可用点击
		for(int i=0;i<childCount;i++){
			View childView = view.getChildAt(i);
			childView.setEnabled(false);
//			childView.setVisibility(View.GONE);
		}
	}

	public static void showView(ViewGroup view, int startOffset) {
		RotateAnimation ra = new RotateAnimation(180, 360, view.getWidth() / 2,
				view.getHeight());
		// 设置动画的播放时间
		ra.setDuration(500);
		ra.setStartOffset(startOffset);
		ra.setFillAfter(true);
		view.startAnimation(ra);

		//得到孩子的总数
		int childCount = view.getChildCount();
		//遍历所有的孩子,把每个孩子设置为可用点击
		for(int i=0;i<childCount;i++){
			View childView = view.getChildAt(i);
			childView.setEnabled(true);
//			childView.setVisibility(View.GONE);
		}
	}
}



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

标签:

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

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