????????????????addView(imageView);??
????????????????LayoutParams?params?=?(FrameLayout.LayoutParams)?imageView??
????????????????????????.getLayoutParams();??
????????????????params.width?=?LayoutParams.WRAP_CONTENT;??
????????????????params.height?=?LayoutParams.WRAP_CONTENT;??
????????????????params.leftMargin?=?mWIDTH?/?2??
????????????????????????-?((menuResIds.length?-?i?-?1)?*?width_padding);??
????????????????params.topMargin?=?mHEIGHT?/?2?-?i?*?height_padding;??
????????????????params.gravity?=?Gravity.LEFT?|?Gravity.TOP;??
????????????????imageView.setLayoutParams(params);??
????????????}??
????????????break;??
????????case?RIGHT_TOP:??
????????????mHomeparams.gravity?=?Gravity.RIGHT?|?Gravity.TOP;??
????????????for?(int?i?=?0;?i?<?menuResIds.length;?i++)?{??
????????????????int?width_padding?=?mWIDTH?/?((menuResIds.length?-?1)?*?2);??
????????????????int?height_padding?=?mHEIGHT?/?((menuResIds.length?-?1)?*?2);??
????????????????ImageView?imageView?=?new?ImageView(mContext);??
????????????????imageView.setImageResource(menuResIds[i]);??
????????????????addView(imageView);??
????????????????LayoutParams?params?=?(FrameLayout.LayoutParams)?imageView??
????????????????????????.getLayoutParams();??
????????????????params.width?=?LayoutParams.WRAP_CONTENT;??
????????????????params.height?=?LayoutParams.WRAP_CONTENT;??
????????????????params.rightMargin?=?mWIDTH?/?2??
????????????????????????-?((menuResIds.length?-?i?-?1)?*?width_padding);??
????????????????params.topMargin?=?mHEIGHT?/?2?-?i?*?height_padding;??
????????????????params.gravity?=?Gravity.RIGHT?|?Gravity.TOP;??
????????????????imageView.setLayoutParams(params);??
????????????}??
????????????break;??
????????case?RIGHT_BOTTOM:??
????????????mHomeparams.gravity?=?Gravity.RIGHT?|?Gravity.BOTTOM;??
????????????for?(int?i?=?0;?i?<?menuResIds.length;?i++)?{??
????????????????int?width_padding?=?mWIDTH?/?((menuResIds.length?-?1)?*?2);??
????????????????int?height_padding?=?mHEIGHT?/?((menuResIds.length?-?1)?*?2);??
????????????????ImageView?imageView?=?new?ImageView(mContext);??
????????????????imageView.setImageResource(menuResIds[i]);??
????????????????addView(imageView);??
????????????????LayoutParams?params?=?(FrameLayout.LayoutParams)?imageView??
????????????????????????.getLayoutParams();??
????????????????params.width?=?LayoutParams.WRAP_CONTENT;??
????????????????params.height?=?LayoutParams.WRAP_CONTENT;??
????????????????params.rightMargin?=?mWIDTH?/?2??
????????????????????????-?((menuResIds.length?-?i?-?1)?*?width_padding);??
????????????????params.bottomMargin?=?mHEIGHT?/?2?-?i?*?height_padding;??
????????????????params.gravity?=?Gravity.RIGHT?|?Gravity.BOTTOM;??
????????????????imageView.setLayoutParams(params);??
????????????}??
????????????break;??
????????case?LEFT_BOTTOM:??
????????????mHomeparams.gravity?=?Gravity.LEFT?|?Gravity.BOTTOM;??
????????????for(int?i?=?0;?i?<?menuResIds.length;?i++){??
????????????????int?width_padding?=?mWIDTH?/?((menuResIds.length?-?1)?*?2);??
????????????????int?height_padding?=?mHEIGHT?/?((menuResIds.length?-1)?*?2);??
????????????????ImageView?imageView?=?new?ImageView(mContext);??
????????????????imageView.setImageResource(menuResIds[i]);??
????????????????addView(imageView);??
????????????????LayoutParams?params?=?(FrameLayout.LayoutParams)imageView.getLayoutParams();??
????????????????params.width?=?LayoutParams.WRAP_CONTENT;??
????????????????params.height?=?LayoutParams.WRAP_CONTENT;????????????
????????????????params.leftMargin?=?mWIDTH?/?2?-?((menuResIds.length?-?i?-?1)?*?width_padding);??
????????????????params.bottomMargin?=?mHEIGHT?/?2?-?i?*?height_padding;??
????????????????params.gravity?=?Gravity.LEFT?|?Gravity.BOTTOM;??
????????????????imageView.setLayoutParams(params);????????????????????????
????????????}??
????????????break;??
????????default:??
????????????????break;??
????????}?????
????????mHome.setLayoutParams(mHomeparams);???????
????}??
????private?OnClickListener?listener?=?new?OnClickListener()?{??
????????public?void?onClick(View?v)?{??
????????????if?(!bMenuShow)?{??
????????????????startAnimationIn(PathMenuView.this,?300);??
????????????}?else?{??
????????????????startAnimationOut(PathMenuView.this,?300);??
????????????}??
????????????bMenuShow?=?!bMenuShow;??
????????}??
????};??
????/**?
?????*?菜单隐藏动画.?
?????*??
?????*?@param?group?
?????*?@param?duration?
?????*/??
????private?void?startAnimationIn(ViewGroup?group,?int?duration)?{??
????????for?(int?i?=?1;?i?<?group.getChildCount();?i++)?{??
????????????ImageView?imageview?=?(ImageView)?group.getChildAt(i);??
????????????imageview.setVisibility(0);??
????????????MarginLayoutParams?mlp?=?(MarginLayoutParams)?imageview??
????????????????????.getLayoutParams();??
????????????Animation?animation?=?null;??
????????????switch?(position)?{??
????????????case?LEFT_TOP:??
????????????????animation?=?new?TranslateAnimation(0F,-mlp.leftMargin+xOffset,0F,-mlp.topMargin?+?yOffset);??
????????????????break;??
????????????case?RIGHT_TOP:??
????????????????animation?=?new?TranslateAnimation(mlp.rightMargin?-?xOffset,0F,-mlp.topMargin?+?yOffset,0F);??
????????????????break;????????????
????????????case?LEFT_BOTTOM:??
????????????????animation?=?new?TranslateAnimation(0F,?-mlp.leftMargin+?xOffset,?0F,?-yOffset?+?mlp.bottomMargin);??
????????????????break;??
????????????case?RIGHT_BOTTOM:??
????????????????animation?=?new?TranslateAnimation(mlp.rightMargin-xOffset,0F,-yOffset?+?mlp.bottomMargin,?0F);??
????????????????break;??
????????????default:??
????????????????break;??
????????????}??
????????????animation.setFillAfter(true);??
????????????animation.setDuration(duration);??
????????????animation.setStartOffset((i?*?100)?/?(-1?+?group.getChildCount()));??
????????????animation.setInterpolator(new?OvershootInterpolator(2F));??
????????????imageview.startAnimation(animation);??
????????}??
????}??
????/**?
?????*?菜单显示动画.?
?????*??
?????*?@param?group?
?????*?@param?duration?
?????*/??
????private?void?startAnimationOut(ViewGroup?group,int?duration){??
????????for?(int?i?=?1;?i?<?group.getChildCount();?i++)?{??
????????????final?ImageView?imageview?=?(ImageView)?group??
????????????????????.getChildAt(i);??
????????????MarginLayoutParams?mlp?=?(MarginLayoutParams)?imageview.getLayoutParams();??
????????????Animation?animation?=?null;??
????????????switch?(position)?{??
????????????case?LEFT_TOP:??
????????????????animation?=?new?TranslateAnimation(-mlp.leftMargin+xOffset,0F,-mlp.topMargin?+?yOffset,0F);??
????????????????break;??
????????????case?RIGHT_TOP:??
????????????????animation?=?new?TranslateAnimation(0F,mlp.rightMargin?-?xOffset,0F,-mlp.topMargin?+?yOffset);??
????????????????break;??
????????????case?LEFT_BOTTOM:??
????????????????animation?=?new?TranslateAnimation(-mlp.leftMargin+xOffset,0F,?-yOffset?+?mlp.bottomMargin,0F);??
????????????????break;??
????????????case?RIGHT_BOTTOM:??
????????????????animation?=?new?TranslateAnimation(0F,mlp.rightMargin-xOffset,?0F,-yOffset?+?mlp.bottomMargin);??
????????????????break;??
????????????default:??
????????????????break;??
????????????}??
????????????animation.setFillAfter(true);animation.setDuration(duration);??
????????????animation.setStartOffset(((group.getChildCount()-i)?*?100)??
????????????????????/?(-1?+?group.getChildCount()));??
????????????animation.setInterpolator(new?AnticipateInterpolator(2F));??
????????????imageview.startAnimation(animation);??
????????}??
????}??
第四步:PathTestActivity.java以及用到的布局文件main.xml代码如下:
PathTestActivity.java(基本没修改代码)代码如下:
[java]? [view plain]( ) [copy]( )
package?com.tutor.path;??
import?android.app.Activity;??
import?android.os.Bundle;??
public?class?PathTestActivity?extends?Activity?{??
????@Override??
????public?void?onCreate(Bundle?savedInstanceState)?{??
????????super.onCreate(savedInstanceState);??
????????setContentView(R.layout.main);?????
????}??
main.xml代码如下:
[java]? [view plain]( ) [copy]( )
<?xml?version="1.0"?encoding="utf-8"?>??
<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
????xmlns:tutor="http://schemas.android.com/apk/res/com.tutor.path"??
????android:layout_width="fill_parent"??
????android:layout_height="fill_parent"??
????android:orientation="vertical"?>??
????<com.tutor.path.PathMenuView??
????????android:id="@+id/text"??
????????android:layout_width="fill_parent"??
????????android:layout_height="fill_parent"??
????????tutor:position="right_bottom"??
?????????/>??
运行点击效果如下:
?????
图1:默认是在右下方这里menuResIds定义了五个菜单??????????????? 图2:点击红色菜单,菜单收回.
下面我们修改main.xml的tutor属性为left_bottom,并且修改PathMenuView.java中的menuResIds.
[java]? [view plain]( ) [copy]( )
Android高级架构师进阶之路
题外话,我在阿里工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。?点击这里前往我的Git领取资料 的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!
标签: