使用HorizontalScrollView实现侧滑菜单

主要继承 HorizontalScrollView   类 ,在构造方法中设置 菜单的宽,  重写 onMeasure,  onLayout 方法 ,在 onLayout 中设置初始显示到 内容页的 scrollTo

1、SlidingMenuView 类的实现如下,

package com.example.slidingmenu;

import android.content.Context;

import android.util.AttributeSet;

import android.util.DisplayMetrics;

import android.util.TypedValue;

import android.view.MotionEvent;

import android.view.ViewGroup;

import android.view.WindowManager;

import android.widget.HorizontalScrollView;

import android.widget.LinearLayout;

public class SlidingMenuView extends HorizontalScrollView {

private LinearLayout mWapper;

private ViewGroup mMenu;

private ViewGroup mContent;

private int mScreenWidth;

private int mMenuRightPadding;

private int mMenuWidth;

private boolean hasMeasured = false;

public SlidingMenuView(Context context) {

super(context);

}

public SlidingMenuView(Context context, AttributeSet attrs) {

super(context, attrs);

WindowManager wm = (WindowManager) context

.getSystemService(context.WINDOW_SERVICE);

DisplayMetrics outMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(outMetrics);

mScreenWidth = outMetrics.widthPixels;

mMenuRightPadding = (int) TypedValue.applyDimension(

TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources()

.getDisplayMetrics());

}

public SlidingMenuView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

if (hasMeasured == false) {

mWapper = (LinearLayout) getChildAt(0);

mMenu = (ViewGroup) mWapper.getChildAt(0);

mContent = (ViewGroup) mWapper.getChildAt(1);

mMenuWidth = mMenu.getLayoutParams().width = mScreenWidth

- mMenuRightPadding;

mContent.getLayoutParams().width = mScreenWidth;

}

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

super.onLayout(changed, l, t, r, b);

if (changed)

this.scrollTo(mMenuWidth, 0);

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {

case MotionEvent.ACTION_UP:

int scrollX = getScrollX();  // 隐藏 在 左边 的 宽度

if( scrollX >= mMenuWidth / 2){

this.smoothScrollTo(mMenuWidth, 0);

}else{

this.smoothScrollTo(0, 0);

}

return true;

default:

break;

}

return super.onTouchEvent(ev);

}

}

2、 xml布局文件中使用的方法如下, 注意 HorizontalScrollView 的子布局里只允许有一个根View

<com.example.slidingmenu.SlidingMenuView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="match_parent" >

<include layout="@layout/sliding_menu" />

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#f0f"

android:gravity="center" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="内容页" />

</LinearLayout>

</LinearLayout>

</com.example.slidingmenu.SlidingMenuView>

3、运行效果图

           

时间: 2024-08-30 11:17:33

使用HorizontalScrollView实现侧滑菜单的相关文章

自定义HorizontalScrollView实现侧滑菜单

下图是工程目录结构: MainActivity代码如下: package com.example.tommy_qq_50; import com.example.tommy_qq_50.view.SlidingMenu; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; public class MainActivity exte

android:自定义HorizontalScrollView实现qq侧滑菜单

今天看了鸿洋_大神在慕课网讲的qq5.0侧滑菜单.学了不少的知识,同时也佩服鸿洋_大神思路的清晰. 看了教程课下也自己实现了一下.代码几乎完全相同  别喷我啊..没办法 o(︶︿︶)o 唉 像素不好 没办法 找不到好的制作gif的软件. 我们暂且称侧滑左边界面的为menu,右边为content 首先是menu的布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:androi

android:QQ多种侧滑菜单的实现

在这篇文章中写了 自定义HorizontalScrollView实现qq侧滑菜单 然而这个菜单效果只是普通的侧拉效果 我们还可以实现抽屉式侧滑菜单 就像这样 第一种效果 第二种效果 第三种效果 第四种效果 其它代码都和上篇文章相同,只是在MyHorizontalScrollView.class重写onScrollChanged这个方法 第一种的侧滑效果代码很简单 @Override protected void onScrollChanged(int l, int t, int oldl, in

Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭【学习鸿洋_视频博客笔记总结】

学习鸿洋博客:http://blog.csdn.net/lmj623565791/article/details/39257409 学习鸿洋视频:慕课网视频 看看Android 高仿 QQ5.0 侧滑菜单效果 自定义控件实现效果: 技术上,继承HorizontalScrollView 加上自定义ViewGroup来实现: 1.onMeasure:决定内部View(子View)的宽和高,以及自己的宽和高 2.onLayout:决定子View的放置位置 3.onTouchEvent[监听动作] 自定

Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭

1.原理分析 首先对比一下我们上篇的实现距离QQ的效果还有多远: 差距还是蛮大的 区别1.QQ的内容区域会伴随菜单的出现而缩小 区别2.QQ的侧滑菜单给人的感觉是隐藏在内容的后面,而不是拖出来的感觉 区别3.QQ的侧滑菜单有一个缩放以及透明度的效果~ 那么我们如何能做到呢: 对于区别1:这个好办,我们可以在滑动的时候,不断的改变内容区域的大小:如何改变呢?我们在菜单出现的整个过程中,不断记录菜单显示的宽度与其总宽度的比值,是个从0到1的过程,然后把0~1转化为1~0.7(假设内容区域缩小至0.7

Android自定义View之仿QQ侧滑菜单实现

最近,由于正在做的一个应用中要用到侧滑菜单,所以通过查资料看视频,学习了一下自定义View,实现一个类似于QQ的侧滑菜单,顺便还将其封装为自定义组件,可以实现类似QQ的侧滑菜单和抽屉式侧滑菜单两种菜单. 下面先放上效果图: 我们这里的侧滑菜单主要是利用HorizontalScrollView来实现的,基本的思路是,一个布局中左边是菜单布局,右边是内容布局,默认情况下,菜单布局隐藏,内容布局显示,当我们向右侧滑,就会将菜单拉出来,而将内容布局的一部分隐藏,如下图所示: 下面我们就一步步开始实现一个

自定义SwipeLayout实现侧滑菜单

请尊重个人劳动成果,转载注明出处,谢谢! http://blog.csdn.net/amazing7/article/details/51768942 先看 SwipeLayout的效果图 图太多了,我这只上传一张,想看 listview和GridView效果的,和想看源码的 -> GitHub 怎么实现后面说,先说会废话. 最近整理以前的项目,那时有一个这样的需求,要在ExpandableListView的ChildView上实现 编辑和删除的侧滑菜单.我当时并没有用别人的框架,实现出来大概是

彷QQ5.0侧滑菜单(自定义控件--SlideMenu的实现)

一般的侧滑的实现 ViewGroup  Menu + Content onTouchEvent MOVE:ViewGroup的leftMargin UP:根据显示菜单的高度,决定将其隐藏或者显示 1.Scroller 2.LeftMargin + Thread 彷QQ5.0侧滑菜单的实现,使用另外的一种方法,继承HorizontalScrollView 一.自定义ViewGroup 1.构造方法的选择,获得一些需要用到的值 2.onMeasure 计算子View的宽和高,以及设置自己的宽和高 3

Android QQ5.0侧滑菜单

背景 相信大家用过QQ的人,都会知道QQ有这样的一个功能,那就是他的菜单,感觉就像抽屉一样被拉出来的感觉,感觉很拉风啊,酷酷的,如果你有一种想要把它给弄清楚,想明白,这是一个好东西,你要把它变成自己的,那么现在就是你的机会,也在此恭喜你,你终于初步具有一个向中级工程师迈进的门票了,因为你已经跨出第一步了. 一:效果图,走一走,天下我有 二:实现步骤 1.菜单和内容布局的实现 2.自定义viewgroup 3.给注册监听事件,添加动画效果 三:示例源码 ①菜单布局 <?xml version=&quo