失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

时间:2022-12-21 07:55:18

相关推荐

android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

/jj120522/article/details/8095852

示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这里我简单说明一下用自定义ViewGroup来实现.

实现方法:我们自定义一个ViewGroup实现左右滑动,第一屏隐藏,第二屏显示.

代码如下:

[java]view plaincopy packagecom.jj.sliding_6;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.util.Log;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.ViewTreeObserver;importandroid.view.View.MeasureSpec;importandroid.view.ViewTreeObserver.OnGlobalLayoutListener;importandroid.widget.AbsoluteLayout;importandroid.widget.LinearLayout;importandroid.widget.ListView;importandroid.widget.RelativeLayout;importandroid.widget.Scroller;/****自定义view**@authorzhangjia**/publicclassMyViewGroupextendsViewGroup{privateScrollerscroller;//滑动privateintdistance;//滑动距离privateViewmenu_view,content_view;privateintduration=500;privateViewTreeObserverviewTreeObserver;privateContextcontext;privateCloseAnimationcloseAnimation;publicstaticbooleanisMenuOpned=false;//菜单是否打开publicMyViewGroup(Contextcontext){super(context,null);}publicvoidsetCloseAnimation(CloseAnimationcloseAnimation){this.closeAnimation=closeAnimation;}publicMyViewGroup(Contextcontext,AttributeSetattrs){super(context,attrs);this.context=context;scroller=newScroller(context);}publicvoidsetDistance(intdistance){this.distance=distance;}@OverrideprotectedvoidonLayout(booleanchanged,intl,intt,intr,intb){if(changed){menu_view=getChildAt(0);//获取滑动菜单的viewcontent_view=getChildAt(1);//获得主页view//相当于fill_parentcontent_view.measure(0,0);content_view.layout(0,0,getWidth(),getHeight());}}@OverridepublicvoidcomputeScroll(){Log.e("jj","isMenuOpned="+isMenuOpned);if(puteScrollOffset()){scrollTo(scroller.getCurrX(),scroller.getCurrY());postInvalidate();//刷新if(closeAnimation!=null)closeAnimation.closeMenuAnimation();}else{MainActivity.isScrolling=false;}}voidshowMenu(){Log.e("jj","shoeMenu");isMenuOpned=true;scroller.startScroll(getScrollX(),0,-distance,0,duration);invalidate();//刷新}//关闭菜单(执行自定义动画)voidcloseMenu(){Log.e("jj","closeMenu");isMenuOpned=false;scroller.startScroll(getScrollX(),0,distance,0,duration);invalidate();//刷新}//关闭菜单(执行自定义动画)voidcloseMenu_1(){isMenuOpned=false;scroller.startScroll(getScrollX(),0,distance-getWidth(),0,duration);invalidate();//刷新}//关闭菜单(执行自定义动画)voidcloseMenu_2(){isMenuOpned=false;scroller.startScroll(getScrollX(),0,getWidth(),0,duration);invalidate();//刷新}/****MenustartScroll(startX,startY,dx,dy)**dx=e1的减去e2的x,所以右移为负,左移动为正dx为移动的距离,如果为正,则标识向左移动|dx|,如果为负,则标识向右移动|dx|*/voidslidingMenu(){Log.e("jj","slidingMenu");//没有超过半屏if(getScrollX()>-getWidth()/2){scroller.startScroll(getScrollX(),0,-getScrollX(),0,duration);isMenuOpned=false;}//超过半屏elseif(getScrollX()<=-getWidth()/2){scroller.startScroll(getScrollX(),0,-(distance+getScrollX()),0,duration);isMenuOpned=true;}invalidate();//刷新Log.v("jj","getScrollX()="+getScrollX());}}abstractclassCloseAnimation{//点击listitem关闭menu动画publicvoidcloseMenuAnimation(){};}

上诉大部分我都加以注释,想必不用我解释太多,大家仔细看都应该可以看懂.

之后我们只需要在MainActivity中把要显示的view添加进去就可以了。

运行效果:

我把源码上传网上,大家可以下载运行,如有不足请留言.

说明一点:listview上下左右滑动冲突没有解决,不过我运行看过很多应用,要么listview不能左右滑动,要么能左右滑动但是listview不到一屏.

源码下载

下面我介绍另外一种方法,这种方法比较简单,但是有点不实用.不过对SlidingMenu滑动菜单要求不高的应用完全可以了,如:云中书城等,没有用到手势时时滑动.

实现方法:我们在点击或者滑动的时候获取当前view的切图bitmap,然后将这个bitmap传递到打开后的activity,在这个activity中布局具体如下:

[java]view plaincopy <?xmlversion="1.0"encoding="utf-8"?><AbsoluteLayoutxmlns:android="/apk/res/android"android:id="@+id/layout"android:layout_width="fill_parent"android:layout_height="fill_parent"><FrameLayoutandroid:id="@+id/slideout_placeholder"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#777777"><ListViewandroid:id="@+id/list"android:layout_width="fill_parent"android:layout_height="fill_parent"android:cacheColorHint="#00000000"/></FrameLayout><ImageViewandroid:id="@+id/slidedout_cover"android:layout_width="fill_parent"android:layout_height="fill_parent"android:scaleType="fitXY"/></AbsoluteLayout> 这种布局目的就是让用户觉得我们操作的是一个view.

具体实现:我将代码上传网上,大家自行下载运行,有不足之处,自行调整.

效果图;

源码下载

这篇讲解比较少,不过大部分都加以注释,相信大家都看得明白.

我看了有的朋友是对HorizontalScrollView进行的自定义,实现方法比较多,因人而异,总之只要实现效果就行.

写到这里,不足的地方请之处,thanks for you .

分享到: 上一篇:android 滑动菜单SlidingMenu的实现下一篇:android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)

如果觉得《android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。