现在的位置: 首页 > 综合 > 正文

Android Path菜单的简单实现  Android高手进阶教程(四)之—-Android 中自定义属性(attr.xml,TypedArray)的使用! 

2013年08月31日 ⁄ 综合 ⁄ 共 2334字 ⁄ 字号 评论关闭

Hi~大家好,出来创业快3个月了,一切还不错,前一段时间用了业余时间搞了个问答类网站YQMA(http://yqma.net).想做中国的stackoverflow,哈哈,只是YY下,希望大家多多支持!

好了,今天给大家分享的是Path菜单的简单实现,可以支持自定义方向(左上,右上,右下,左下),并且可以自定义菜单的个数,难点就是菜单的摆放位置(动态设置margin),还有动画的实现,其实动画只是简单用了个TranslateAnimation,N个菜单一起移动的时候感觉很cool~

这里也用到了自定义标签,这里不懂的童鞋可以看我 Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用! 这篇文章.好了废话不多说了,

首先创建一个android工程命名为PathTest.目录结构如下图:

第二步:在values文件夹下新建一个attrs.xml文件,代码如下:

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="PathMenuView">    
  4.         <attr name="position">   
  5.             <enum name="left_top" value="0"></enum>  
  6.             <enum name="right_top" value="1"></enum>  
  7.             <enum name="right_bottom" value="2"></enum>  
  8.             <enum name="left_bottom" value="3"></enum>  
  9.         </attr>  
  10.     </declare-styleable>    
  11. </resources>  

第三步:新建一个PathMenuView.java这个就是我们自定义的Path菜单控件,代码如下:

[java] view
plain
copy

  1. package com.tutor.path;  
  2.   
  3. import android.content.Context;  
  4. import android.content.res.TypedArray;  
  5. import android.util.AttributeSet;  
  6. import android.view.Gravity;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.view.animation.Animation;  
  10. import android.view.animation.AnticipateInterpolator;  
  11. import android.view.animation.OvershootInterpolator;  
  12. import android.view.animation.TranslateAnimation;  
  13. import android.widget.FrameLayout;  
  14. import android.widget.ImageView;  
  15.   
  16.   
  17. /** 
  18.  * @author frankiewei. 
  19.  * 超级仿path菜单 
  20.  * position定义菜单的位置,目前支持:左上;右上;右下;左下四个方向。 
  21.  * menuResIds定义出现的菜单的资源ID 
  22.  */  
  23. public class PathMenuView extends FrameLayout {  
  24.       
  25.     private static final int LEFT_TOP = 0;  
  26.       
  27.     private static final int RIGHT_TOP = 1;  
  28.       
  29.     private static final int RIGHT_BOTTOM = 2;  
  30.       
  31.     private static final int LEFT_BOTTOM = 3;  
  32.       
  33.       
  34.     /** 
  35.      * 默认的位置是在右下角. 
  36.      */  
  37.     private int position = 3;  
  38.       
  39.     /** 
  40.      * 那个圆形菜单. 
  41.      */  
  42.     private ImageView mHome;  
  43.       
  44.     /** 
  45.      * 上下文. 
  46.      */  
  47.     private Context mContext;  
  48.       
  49.       
  50.     /** 
  51.      * 设备的宽度. 
  52.      */  
  53.     private int mWIDTH = 0;  
  54.       
  55.     /** 
  56.      * 设备的高度. 
  57.      */  
  58.     private int mHEIGHT = 0;  
  59.       
  60.     /** 
  61.      * 设备的density. 
  62.      */  
  63.     private float mDensity;  
  64.       
  65.     /** 
  66.      * 菜单是否显示. 
  67.      */  
  68.     private boolean bMenuShow;  
  69.       
  70.     private static int  xOffset     = 15;  
  71.     private

抱歉!评论已关闭.