`
liming1022
  • 浏览: 8483 次
  • 性别: 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程序源码

    Android滑动菜单的实现方式多种多样,而"Android滑动菜单特效实现,仿人人客户端侧滑效果demo程序源码"是针对这一主题的一个实例项目。这个示例代码旨在模仿人人客户端的侧滑菜单效果,提供了丰富的交互体验和视觉...

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

    5. **动画效果**:为了实现类似人人客户端的滑动效果,我们还可以添加自定义的动画,比如平滑地改变主内容视图的透明度或宽度,以及侧边栏的出现和消失动画。 在`RenRenSlideMenuDemo`项目中,你应该能找到一个完整...

    仿人人侧滑效果

    本示例“仿人人侧滑效果”是利用开源库`SlidingMenu`实现的,它为用户界面增加了类似社交应用人人网的左侧滑动菜单效果。这种效果能够优雅地展示更多的内容和功能,同时保持主界面的简洁。 `SlidingMenu`库是由...

    仿人人网侧滑

    这个"仿人人网侧滑"项目旨在帮助Android初学者理解如何实现这样的功能,利用Scroller类来处理滑动动画效果。下面将详细讲解这个知识点。 一、侧滑菜单原理 侧滑菜单,通常被称为抽屉式导航(Drawer Navigation),...

    仿知乎客户端侧滑

    在Android开发中,"仿知乎客户端侧滑"的实现涉及到多个关键知识点,主要集中在用户界面的设计和交互上。首先,我们需要理解Action Bar和DrawerLayout这两个核心组件的作用。 **Action Bar** 是Android应用中常见的...

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

    【Android实现网易新闻客户端侧滑菜单(2)】这篇教程主要讲解了如何在Android应用中自定义实现网易新闻客户端的侧滑菜单。在第一部分中,我们了解到可以通过第三方库SlideMenu来快速实现这一功能,而在第二部分,...

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

    本文将详细介绍如何在Android应用中实现一个仿人人客户端的侧滑菜单效果。这个效果的特点是,当用户从主界面向右滑动时,菜单会逐渐展现,而主界面则部分隐藏,仅保留左侧一小部分与菜单一同显示。 首先,我们需要...

    iOS 仿facebook 人人客户端界面 侧滑菜单

    为了实现类似Facebook的侧滑效果,我们需要在顶部视图控制器的视图上添加手势识别器,以便用户可以通过从屏幕左侧滑动来触发菜单。`ECSlidingViewController`库提供了内置的手势支持,只需进行适当的配置即可。 在...

    QQ5.0及QQMINI侧滑效果

    QQ5.0及QQMINI侧滑效果是腾讯公司针对其即时通讯软件QQ的一个功能更新,这个特性在移动设备上尤为显著,提升了用户体验。侧滑效果通常指的是用户在使用应用时,通过在屏幕边缘向内滑动来触发特定的操作或者展示隐藏...

    滚动视图(带侧滑效果)

    滚动视图(带侧滑效果)是移动应用开发中一种常见的交互设计,它结合了滚动浏览和侧滑操作,使得用户能够以更加直观和高效的方式查看和操作内容。这种设计通常用于新闻应用、社交媒体和电子邮件客户端等,其中网易...

    安卓SlidingMenu各种菜单侧滑菜单相关-仿照360手机助手网易新闻客户端实现侧滑.zip

    在Android应用开发中,侧滑菜单(SlidingMenu)是一种常见的设计模式,它通常用于实现主界面与侧边栏的交互,比如360手机助手和网易新闻客户端。这种设计可以提供一个隐藏的导航面板,用户通过从屏幕边缘向内滑动来...

    Android高级应用源码-仿照360手机助手,网易新闻客户端 实现 侧滑.zip

    这个"Android高级应用源码-仿照360手机助手,网易新闻客户端 实现 侧滑.zip"压缩包包含了实现这种侧滑效果的源代码示例。这里我们将详细探讨这一设计模式及其实现方式。 首先,侧滑菜单通常出现在手机屏幕的左侧或...

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

    在Android开发中,侧滑菜单已经成为了许多应用的标准设计元素,尤其在新闻客户端中非常常见。这个教程将向你展示如何实现类似网易新闻客户端的侧滑菜单。首先,侧滑菜单提供了一种高效的方式,将大量内容存储在隐藏...

    android侧滑控件SlidingMenu(高仿网易客户端)

    SlidingMenu是一款开源的Android库,由Jeremy Feinstein创建,用于在Android应用中实现侧滑效果。它提供了多种滑动模式,如顶部滑动、底部滑动以及左右滑动,且可以自定义滑动速度和敏感度。在本示例中,我们关注的...

    网易新闻客户端框架 slidingmenu 侧滑 仿360手机助手

    综上所述,网易新闻客户端的这个slidingmenudemo项目提供了一个学习和实践Android侧滑菜单与ViewPager集成的良好示例,对于提升应用的用户体验和交互设计具有重要参考价值。开发者可以通过研究这个项目,深入理解这...

    Android高级应用源码-仿照360手机助手,网易新闻客户端 实现 侧滑.rar

    在这个项目中,开发者可能使用了自定义实现,以便更好地模仿360手机助手和网易新闻客户端的样式和交互效果。 2. **Material Design**:Android的Material Design设计语言是谷歌推荐的应用界面设计规范,它提供了...

    仿花瓣Android客户端,瀑布流,侧滑菜单

    【标题】"仿花瓣Android客户端,瀑布流,侧滑菜单" 涉及的主要知识点包括Android应用程序开发、用户界面设计以及数据展示技术。这是一款基于Android平台的应用程序,旨在模仿花瓣网(Huaban)的客户端功能,特别是其...

Global site tag (gtag.js) - Google Analytics