客户端的侧滑效果,简单实用,附如下代码:
其中Scroller的代码就不沾了,和系统提供的Scroller是差不多的,可参照源码.
private View content; private View menu; private boolean isMenuShow = false; public MySlideView(Context context, AttributeSet attrs) { super(context, attrs); scroller = new Scroller(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); menu = getChildAt(0); content = getChildAt(1); menu.measure(MeasureSpec.makeMeasureSpec(menu.getLayoutParams().width, MeasureSpec.EXACTLY) , heightMeasureSpec); content.measure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { System.out.println("layout:::"+getChildCount()); menu.layout(0-menu.getMeasuredWidth(), 0, 0, b); content.layout(0, 0, r, b); } private int firstX; private int lastX; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: firstX = lastX = (int) event.getX(); break; case MotionEvent.ACTION_MOVE: int disX = (int) (lastX - event.getX()); lastX = (int) event.getX(); int nextScrollX = getScrollX()+disX; // 可能的,下一个 mScrollX 的值 if( nextScrollX >= -menu.getWidth() && nextScrollX <=0){ scrollBy(disX, 0); } break; case MotionEvent.ACTION_UP: int curScrollX = getScrollX(); if(curScrollX > -menu.getWidth()/2){ isMenuShow = false; }else{ isMenuShow = true; } flushState(); break; } return true; } private void flushState() { int distance = 0; if(!isMenuShow){ // scrollTo(0,0); distance = 0-getScrollX(); }else{ // scrollTo(-menu.getWidth(),0); distance = -menu.getWidth()-getScrollX(); } scroller.startScroll(getScrollX(), 0, distance, 0); invalidate(); } @Override public void computeScroll() { if(scroller.computeScrollOffset()){ scrollTo(scroller.getCurrX(),0); invalidate(); } } private Scroller scroller ; public void changeState() { isMenuShow = !isMenuShow; flushState(); }
还有在activity中处理点击事件,附如下代码:
private MySlideView msv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); msv = (MySlideView) findViewById(R.id.msv); findViewById(R.id.main_back).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { msv.changeState(); } }); } public void onClick(View v){ TextView tv = (TextView) v; Toast.makeText(this,tv.getText(), 0).show(); }
相关推荐
此为示例代码,详细讲解请参考http://blog.csdn.net/sinyu890807/article/details/8714621
此为示例代码,详细讲解请参考 http://blog.csdn.net/sinyu890807/article/details/8714621
用slidingmenue实现的仿人人侧滑效果
简单易懂的仿人人网的侧滑菜单,适合Android初学者,利用Scroller实现的这类功能
主要介绍了Android仿人人客户端滑动菜单的侧滑特效实现代码,小编觉得挺不错的,分享给大家供大家参考
Android实现网易新闻客户端侧滑菜单(一) Android实现网易新闻客户端侧滑菜单(二) 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现。 ViewPagerIndicator是一款分页指标小部件兼容ViewPager,...
Android中很多产品(比如360手机助手、网易菜单…)都采用侧滑菜单的展现形式,采用这种展现形式 1、能把更多的展现内容都存放在菜单中 2、设计上也能体现出视觉效果 现在这种交互方式越来越流行了,虽然这种交互方式...
首页中侧滑效果非常好看,从下面图中可以看出,稍加修改就可以运用到自己的项目中,源码采用mvc的框架,层次清晰,代码很多,但很多都有注释。源码中对网络的判断,以及自定义的加载图片都值得学习。(源码采用GBK...
高仿网易新闻客户端源码,侧滑效果,分享功能,值得参考
今日头条客户端简单的ui界面,欢迎界面跳转到主界面,侧滑效果,碎片的应用
完整新浪新闻客户端,实现新闻栏侧滑效果
这是我我个人仿照网易新闻客户端的效果,编写的一个侧滑菜单,希望想学习的同学下载其源码阅读一下,里面注释写的很详尽,有什么问题或者BUG,希望向本人反馈,共同学习,共同进步,谢谢!
网易新闻客户端效果很明显,当我们手指在屏幕左侧向右滑动时候,就会有一个抽屉式的菜单从左边弹出,并且是“悬浮”在主界面之上的,合理的利用了设备上有限的空间,同样手指在屏幕右侧向左滑动也会出现一个向左弹出...
一个市场上普遍的客户端显示效果,集成Indicator,侧滑,Fragment嵌套,viewpager嵌套,
怎样通过 DrawerLayout 实现侧滑菜单的效果 怎样进行网络内容的异步加载以及数据缓存 怎样使用 Gradle 轻松完成项目的构建 怎样使用 PreferenceFragment 方便地完成设置界面 怎样使用 属性动画
Android QuickNews新闻客户端源码,本项目主要采用slidingmenu实现侧滑NineOldAndroids , androidannotations ,discrollview ,ListViewAnimations ,PhotoView 等等来实现 ViewPager和ScrollView头部效果,...
首页中侧滑效果非常好看,从下面图中可以看出,稍加修改就可以运用到自己的项目中,源码采用mvc的框架,层次清晰,代码很多,但很多都有注释。 源码中对网络的判断,以及自定义的加载图片都值得学习。(源码采用GBK...
背景:仿新闻客户端 【圆静】 搭建框架 功能: WelcomActivity:欢迎界面【动画效果】 GuideActivity:引导页面 【红点移动原理】 MainActivity:主页面【实现侧滑菜单】 初始化Fragment并且加载到Activity中来 ...
一个完整的天气预报客户端 主要包括功能:引导页 侧边栏 城市选择 侧滑删除列表项 网络请求 目前用到的一些开源库。 Volley Google I/O 2013推出的官方网络请求库,请求快速,使用方便,易于扩展,而且支持图片...