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

-----------------------------案例一---------------动画效果不截图了-------------------------------------

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);
		}
	}
}
时间: 2024-12-29 23:32:01

自定义控件---系统控件组合式(案例一)的相关文章

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

-----------------------------------------------案例效果------------------------------------- activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout

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

效果图如下 -------------------------------------------------- activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa

【读书笔记-《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)

3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里的name是自定义的,不是索引变量."@+"表示新声明,"@"表示引用,例如:"@+id/tv" 表示新声明一个id,是id名为tv的组件:"@id/tv" 表示引用id名为tv的组件. 给按钮添加点击事件响应  想知道按钮是否被

Android调用相册拍照控件实现系统控件缩放切割图片

android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.ByteArrayOutputStream;import java.io.File;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Ur

【读书笔记-《Android游戏编程之从零开始》】8.Android 游戏开发常用的系统控件(系统控件常见问题)

Android 中常用的计量单位Android有时候需要一些计量单位,比如在布局Layout文件中可能需要指定具体单位等.常用的计量单位有:px.dip(dp).sp,以及一些不常用的pt.in.mm.下面详细介绍下这些计量单位之间的区别和联系.in:英寸(长度单位):mm:毫米(长度单位):pt:磅/点,1/72英寸(一个标准的长度单位):sp:全名 scaled pixels-best for text size,放大像素,与刻度无关,可以根据用户的字体大小就行缩放,主要用来处理字体的大小:

【读书笔记-《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)

3.7 ProgressBar ProgressBar类官方文档地址:http://developer.android.com/reference/android/widget/ProgressBar.html 在Android应用开发中,ProgressBar(运行进度条)是比较常用到的组件,例如下载进度.安装程序进度.加载资源进度显示等.在Android中提供了两种样式来分别表示在不同状态下显示的进度条,下面来实现这两种样式.默认进度条是圆形,通过style属性来指定系统进度条的大小:sty

【读书笔记-《Android游戏编程之从零开始》】4.Android 游戏开发常用的系统控件(EditText、CheckBox、Radiobutton)

3.4 EditText EditText类官方文档地址:http://developer.android.com/reference/android/widget/EditText.html EditText继承TextView,所以EditText具有TextView的属性特点,下面主要介绍一些EditText的特有的输入法的属性特点android:layout_gravity="center_vertical":设置控件显示的位置:默认top,这里居中显示,还有bottomand

【读书笔记-《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)

3.9 TabSpec与TabHost TabHost类官方文档地址:http://developer.android.com/reference/android/widget/TabHost.html Android 实现tab视图有2种方法,一种是在布局页面中定义<tabhost>标签,另一种就是继承tabactivity.但是我比较喜欢第二种方式,应为如果页面比较复杂的话你的XML文件会写得比较庞大,用第二种方式XML页面相对要简洁得多. <?xml version="1

Android 重写系统控件UI,自定义进度条

Android的系统控件没有对应的XML布局文件,界面的逻辑都是在onDraw(Canvas canvas)里面进行绘制 所以如果对控件的外观进行修改就需要重写onDraw(Canvas canvas)方法,控件的功能逻辑可以不变. 下面是继承ProgressBar重写了控件的界面,一个是加了文字的水平进度条,一个是圆圈的进度条 public class HorizontalProgressBarWithNumber extends ProgressBar { private static fi