`
liming1022
  • 浏览: 8137 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

客户端侧滑效果

阅读更多

客户端的侧滑效果,简单实用,附如下代码:

其中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();
	}

 

 

分享到:
评论

相关推荐

    Android滑动菜单特效实现,仿人人客户端侧滑效果demo程序源码

    此为示例代码,详细讲解请参考http://blog.csdn.net/sinyu890807/article/details/8714621

    Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现

    此为示例代码,详细讲解请参考 http://blog.csdn.net/sinyu890807/article/details/8714621

    仿人人侧滑效果

    用slidingmenue实现的仿人人侧滑效果

    仿人人网侧滑

    简单易懂的仿人人网的侧滑菜单,适合Android初学者,利用Scroller实现的这类功能

    Android仿人人客户端滑动菜单的侧滑菜单效果

    主要介绍了Android仿人人客户端滑动菜单的侧滑特效实现代码,小编觉得挺不错的,分享给大家供大家参考

    Android实现网易新闻客户端首页效果

    Android实现网易新闻客户端侧滑菜单(一) Android实现网易新闻客户端侧滑菜单(二) 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现。 ViewPagerIndicator是一款分页指标小部件兼容ViewPager,...

    Android实现网易新闻客户端侧滑菜单(1)

    Android中很多产品(比如360手机助手、网易菜单…)都采用侧滑菜单的展现形式,采用这种展现形式 1、能把更多的展现内容都存放在菜单中 2、设计上也能体现出视觉效果 现在这种交互方式越来越流行了,虽然这种交互方式...

    Android应用源码CSDN博客安卓客户端

    首页中侧滑效果非常好看,从下面图中可以看出,稍加修改就可以运用到自己的项目中,源码采用mvc的框架,层次清晰,代码很多,但很多都有注释。源码中对网络的判断,以及自定义的加载图片都值得学习。(源码采用GBK...

    网易新闻客户端高仿

    高仿网易新闻客户端源码,侧滑效果,分享功能,值得参考

    今日头条客户端

    今日头条客户端简单的ui界面,欢迎界面跳转到主界面,侧滑效果,碎片的应用

    新浪新闻侧滑栏滑动

    完整新浪新闻客户端,实现新闻栏侧滑效果

    Android仿网易自定义侧滑菜单

    这是我我个人仿照网易新闻客户端的效果,编写的一个侧滑菜单,希望想学习的同学下载其源码阅读一下,里面注释写的很详尽,有什么问题或者BUG,希望向本人反馈,共同学习,共同进步,谢谢!

    Android仿网易新闻v4.4最新版侧滑菜单

    网易新闻客户端效果很明显,当我们手指在屏幕左侧向右滑动时候,就会有一个抽屉式的菜单从左边弹出,并且是“悬浮”在主界面之上的,合理的利用了设备上有限的空间,同样手指在屏幕右侧向左滑动也会出现一个向左弹出...

    新闻客户端

    一个市场上普遍的客户端显示效果,集成Indicator,侧滑,Fragment嵌套,viewpager嵌套,

    Android 开源新闻客户端 源码

    怎样通过 DrawerLayout 实现侧滑菜单的效果 怎样进行网络内容的异步加载以及数据缓存 怎样使用 Gradle 轻松完成项目的构建 怎样使用 PreferenceFragment 方便地完成设置界面 怎样使用 属性动画

    Android QuickNews新闻客户端源码

    Android QuickNews新闻客户端源码,本项目主要采用slidingmenu实现侧滑NineOldAndroids , androidannotations ,discrollview ,ListViewAnimations ,PhotoView 等等来实现 ViewPager和ScrollView头部效果,...

    Android应用源码CSDN博客安卓客户端.rar

    首页中侧滑效果非常好看,从下面图中可以看出,稍加修改就可以运用到自己的项目中,源码采用mvc的框架,层次清晰,代码很多,但很多都有注释。 源码中对网络的判断,以及自定义的加载图片都值得学习。(源码采用GBK...

    仿新闻客户端3

    背景:仿新闻客户端 【圆静】 搭建框架 功能: WelcomActivity:欢迎界面【动画效果】 GuideActivity:引导页面 【红点移动原理】 MainActivity:主页面【实现侧滑菜单】 初始化Fragment并且加载到Activity中来 ...

    完整天气预报客户端源码

    一个完整的天气预报客户端 主要包括功能:引导页 侧边栏 城市选择 侧滑删除列表项 网络请求 目前用到的一些开源库。 Volley Google I/O 2013推出的官方网络请求库,请求快速,使用方便,易于扩展,而且支持图片...

Global site tag (gtag.js) - Google Analytics