



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中如何使用SlidingMenu控件
Android中如何使用SlidingMenu控件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java代码:(重写onTouchEvent方法处理侧滑菜单处的事件分发机制)public
class
SlidingMenu
extends
ViewGroup
implements
OnClickListener
{
private
View
menu;
private
View
main;
private
int
menuWidth;
private
int
downX;
private
Scroller
mScroller;
private
ImageView
iv_back;
//
加载阶段,先加载自身,然后再加载孩子
public
SlidingMenu(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
mScroller=new
Scroller(context);//声明Scroller进行滚动
}
//
结束加载的回调
@Override
protected
void
onFinishInflate()
{
super.onFinishInflate();
menu
=
getChildAt(0);
main
=
getChildAt(1);
menuWidth
=
menu.getLayoutParams().width;
Log.i("test",
"menuWidth:"
+
menuWidth);
iv_back
=
(ImageView)
findViewById(R.id.iv_back);
iv_back.setOnClickListener(this);
}
//
默认ViewGroup只测量自身,并不测量自身的孩子
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
//
将onMeasure中的两个参数直接传给两个孩子
menu.measure(widthMeasureSpec,
heightMeasureSpec);
main.measure(widthMeasureSpec,
heightMeasureSpec);
}
//
布局
//
参数1,2,3,4:左上右下
@Override
protected
void
onLayout(boolean
changed,
int
l,
int
t,
int
r,
int
b)
{
menu.layout(-menuWidth,
t,
0,
b);
main.layout(l,
t,
r,
b);
}
@Override
public
boolean
onTouchEvent(MotionEvent
event)
{
switch
(event.getAction())
{
case
MotionEvent.ACTION_DOWN:
downX
=
(int)
event.getX();
break;
case
MotionEvent.ACTION_MOVE:
int
moveX
=
(int)
event.getX();
int
dX
=
moveX
-
downX;
//
scrollTo(x,
y);//绝对移动
//
scrollBy(x,
y);//相对移动
//
获取滚动的坐标
int
scrollX
=
getScrollX();
Log.i("test",
"scrollX:"
+
scrollX);
if
(scrollX
-
dX
>=
-200
&&
scrollX
-
dX
<=
0)
{
scrollBy(-dX,
0);
}
downX
=
moveX;
break;
case
MotionEvent.ACTION_UP:
int
upScrollX
=
getScrollX();
Log.i("test",
"upScrollX:"+upScrollX);
int
dScrollX;
if(upScrollX>-menuWidth/2){
//收回去
dScrollX=-upScrollX;
isOpen=false;
}else{
//展开
dScrollX=-menuWidth-upScrollX;
isOpen=true;
}
Log.i("test",
"dScrollX:"+dScrollX);
mScroller.startScroll(upScrollX,
0,
dScrollX,
0,20*dScrollX);
//滚动后,要让界面重绘
invalidate();
break;
default:
break;
}
return
true;
}
@Override
public
void
computeScroll()
{
puteScroll();
//调用这个方法来获取期望的滚动点,如果返回true,表示动画还没有执行完成
if(mSputeScrollOffset()){
//用Scroller滚动,获取下一个期望的滚动点,滚动过去
//获取期望点的滚动坐标
int
currX
=
mScroller.getCurrX();
scrollTo(currX,
0);
invalidate();
}
}
private
boolean
isOpen;
@Override
public
void
onClick(View
v)
{
switch
(v.getId())
{
case
R.id.iv_back:
int
startX;
int
dx;
if(!isOpen){
startX=0;
dx=-menuWidth;
}else{
startX=-menuWidth;
dx=menuWidth;
}
isOpen=!isOpen;
mScroller.startScroll(startX,
0,
dx,
0,
2000);
invalidate();
break;
default:
break;
}
}
}activity布局文件:<mgzxc.myslidmenu.MySlidMenu
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
layout="@layout/menu_layout"
/>
<include
layout="@layout/main_layout"
/>
</mgzxc.myslidmenu.MySlidMenu>主界面的布局文件:<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
android:gravity="center"
android:background="@android:color/holo_blue_bright"
android:layout_width="match_parent"
android:layout_height="match_parent">
<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手车辆买卖合同范本
- 加盟造价公司合同范本
- 内部房屋转让合同范本
- 公司赞助会议合同范本
- 公交广告合同范本
- 农村房屋确权合同范本
- 维修电机合同范本模板
- 企业流程咨询合同范本
- 中介学车合同范本
- 上班带薪化妆合同范本
- 公务员录用审批表
- 重庆市住宅装饰装修工程质量验收标准
- 废橡胶处理协议书范本
- 部编版初中语文七至九年级语文教材各册人文主题与语文要素汇总一览表合集单元目标能力点
- 新苏教版六年级下册《科学》全一册全部课件(共16课)
- 幼儿园食品安全教育培训ppt课件模板
- 《离骚》PPT课堂大赛一等奖
- 洁净厂房监理实施细则
- 初三九年级下册部编人教版历史考试必背资料(2020最新版)
- 观赏树木的园林特性课件
- 当代教育心理学(范围)课件
评论
0/150
提交评论