<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="rightPadding" format="dimension" /> <declare-styleable name="SlidingMenu"> <attr name="rightPadding" /> </declare-styleable> </resources>
<com.baoy.demo.demoslidemenu.view.SlidingMenu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:baoy="http://schemas.android.com/apk/res/com.baoy.demo.demoslidemenu" android:id="@+id/id_menu" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="@color/grey" android:scrollbars="none" baoy:rightPadding="100dp" > <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="horizontal" > <include layout="@layout/layout_menu" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/red" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/title_btn_left" android:layout_width="24dip" android:layout_height="24dip" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="9dip" android:background="@drawable/title_bar_menu" android:visibility="visible" /> </LinearLayout> <View android:id="@+id/view_slide_touch" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> </LinearLayout> </com.baoy.demo.demoslidemenu.view.SlidingMenu>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/yellow" > <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/three" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginBottom="12dp" android:layout_marginLeft="25dp" android:layout_marginTop="40dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv_loginname" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignBottom="@+id/three" android:layout_alignTop="@+id/three" android:layout_marginLeft="13dp" android:layout_toRightOf="@+id/three" android:gravity="center_vertical" android:textColor="@color/grey" android:textSize="19sp" /> </RelativeLayout> <View android:id="@+id/view_line" android:layout_width="match_parent" android:layout_height="1px" android:layout_marginTop="12dp" android:layout_below="@+id/relativeLayout1" android:layout_marginRight="40dp" android:background="#000000" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/view_line" android:layout_marginRight="40dp" android:background="#41535b" /> <RelativeLayout android:id="@+id/noticeLayout" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/view_line" android:layout_marginTop="1px" android:background="@color/transparent" android:onClick="onClick" > <ImageView android:id="@+id/imageViewNotice" android:layout_width="33dp" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView_notice_show" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:layout_toRightOf="@+id/imageViewNotice" android:gravity="center_vertical" android:paddingBottom="10dp" android:paddingRight="30dp" android:paddingTop="10dp" android:text="@string/app_name" android:textColor="@color/black" android:textSize="17sp" /> <View android:id="@+id/textView_notice_show_point" android:layout_width="8dp" android:layout_height="8dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="16dp" android:background="@drawable/ic_launcher" android:visibility="gone" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/noticeLayout" android:layout_marginRight="40dp" android:background="#000000" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/noticeLayout" android:layout_marginRight="40dp" android:layout_marginTop="1px" android:background="#41535b" /> <RelativeLayout android:id="@+id/exitLayout" android:layout_width="match_parent" android:layout_height="53dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:alpha="0.8" android:background="@color/grey" android:onClick="onClick" > <ImageView android:id="@+id/imageExit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="27dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@+id/imageExit" android:text="@string/app_name" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/contactLayout" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/noticeLayout" android:layout_marginTop="2px" android:background="@color/transparent" android:onClick="onClick" > <ImageView android:id="@+id/imageViewContact" android:layout_width="33dp" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:layout_toRightOf="@+id/imageViewContact" android:text="@string/app_name" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/contactLayout" android:layout_marginRight="40dp" android:background="#000000" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/contactLayout" android:layout_marginRight="40dp" android:layout_marginTop="1px" android:background="#41535b" /> <RelativeLayout android:id="@+id/settingLayout" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/contactLayout" android:layout_marginTop="2px" android:background="@color/transparent" > <ImageView android:id="@+id/imageViewSetting" android:layout_width="33dp" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:layout_toRightOf="@+id/imageViewSetting" android:text="@string/app_name" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/settingLayout" android:layout_marginRight="40dp" android:background="#000000" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/settingLayout" android:layout_marginRight="40dp" android:layout_marginTop="1px" android:background="#41535b" /> <RelativeLayout android:id="@+id/reportLayout" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/settingLayout" android:layout_marginTop="2px" android:background="@color/transparent" > <ImageView android:id="@+id/imageViewReport" android:layout_width="33dp" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="26dp" android:layout_toRightOf="@+id/imageViewReport" android:text="@string/app_name" android:textColor="@color/black" android:textSize="17sp" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/reportLayout" android:layout_marginRight="40dp" android:background="#000000" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_below="@+id/reportLayout" android:layout_marginRight="40dp" android:layout_marginTop="1px" android:background="#41535b" /> </RelativeLayout>
package com.baoy.demo.demoslidemenu.util; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager; public class ScreenUtils { private ScreenUtils() { /* cannot be instantiated */ throw new UnsupportedOperationException("cannot be instantiated"); } /** * 获得屏幕高度 * * @param context * @return */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } /** * 获得屏幕宽度 * * @param context * @return */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; } /** * 获得状态栏的高度 * * @param context * @return */ public static int getStatusHeight(Context context) { int statusHeight = -1; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int height = Integer.parseInt(clazz.getField("status_bar_height") .get(object).toString()); statusHeight = context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return statusHeight; } /** * 获取当前屏幕截图,包含状态栏 * * @param activity * @return */ public static Bitmap snapShotWithStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache(); return bp; } /** * 获取当前屏幕截图,不包含状态栏 * * @param activity * @return */ public static Bitmap snapShotWithoutStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } }
package com.baoy.demo.demoslidemenu.activity; import com.baoy.demo.demoslidemenu.R; import com.baoy.demo.demoslidemenu.view.SlidingMenu; import android.os.Bundle; import android.app.Activity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener, OnTouchListener { private SlidingMenu mLeftMenu; private View mSlideTouchView; private Button mMenuBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } public void initView() { mLeftMenu = (SlidingMenu) findViewById(R.id.id_menu); mSlideTouchView = findViewById(R.id.view_slide_touch); mMenuBtn = (Button) findViewById(R.id.title_btn_left); mMenuBtn.setOnClickListener(this); mSlideTouchView.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { return mLeftMenu.isOpen(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.title_btn_left: openMenu(); break; } } public void toggleMenu(View view) { mLeftMenu.toggle(); } public void openMenu() { toggleMenu(null); } @Override protected void onResume() { super.onResume(); mLeftMenu.closeMenu(); } }
package com.baoy.demo.demoslidemenu.view; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import com.baoy.demo.demoslidemenu.R; import com.baoy.demo.demoslidemenu.util.ScreenUtils; import com.nineoldandroids.view.ViewHelper; public class SlidingMenu extends HorizontalScrollView { private int mScreenWidth; private int mMenuRightPadding; private int mMenuWidth; private int mHalfMenuWidth; private boolean isOpen; private boolean once; private boolean touchReturn = true; private ViewGroup mMenu; private ViewGroup mContent; public SlidingMenu( Context context, AttributeSet attrs ) { this( context, attrs, 0 ); } public SlidingMenu( Context context, AttributeSet attrs, int defStyle ) { super( context, attrs, defStyle ); mScreenWidth = ScreenUtils.getScreenWidth( context ); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.SlidingMenu, defStyle, 0 ); int n = a.getIndexCount(); for ( int i = 0; i < n; i++ ) { int attr = a.getIndex( i ); switch ( attr ) { case R.styleable.SlidingMenu_rightPadding: // 默认50 mMenuRightPadding = a.getDimensionPixelSize( attr, ( int ) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 100f, getResources().getDisplayMetrics() ) );// 默认为10DP break; } } a.recycle(); setOverScrollMode( View.OVER_SCROLL_NEVER ); } public SlidingMenu( Context context ) { this( context, null, 0 ); } public boolean isOpen() { return isOpen; } @Override protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec ) { if ( !once ) { LinearLayout wrapper = ( LinearLayout ) getChildAt( 0 ); mMenu = ( ViewGroup ) wrapper.getChildAt( 0 ); mContent = ( ViewGroup ) wrapper.getChildAt( 1 ); mMenuWidth = mScreenWidth - mMenuRightPadding; mHalfMenuWidth = mMenuWidth / 2; mMenu.getLayoutParams().width = mMenuWidth; 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 ); once = true; } } @Override public boolean onTouchEvent( MotionEvent ev ) { int action = ev.getAction(); switch ( action ) { // Up时,进行判断,如果显示区域大于菜单宽度一半则完全显示,否则隐藏 case MotionEvent.ACTION_UP: int scrollX = getScrollX(); if ( scrollX > mHalfMenuWidth ) { this.smoothScrollTo( mMenuWidth, 0 ); isOpen = false; } else { this.smoothScrollTo( 0, 0 ); isOpen = true; } return true; } return super.onTouchEvent( ev ); } public void openMenu() { if ( isOpen ) return; this.smoothScrollTo( 0, 0 ); isOpen = true; } public void closeMenu() { if ( isOpen ) { this.smoothScrollTo( mMenuWidth, 0 ); isOpen = false; } } public void toggle() { if ( isOpen ) { closeMenu(); } else { openMenu(); } } @Override protected void onScrollChanged( int l, int t, int oldl, int oldt ) { super.onScrollChanged( l, t, oldl, oldt ); float scale = l * 1.0f / mMenuWidth; float leftScale = 1 - 0.3f * scale; float rightScale = 0.8f + scale * 0.2f; ViewHelper.setScaleX( mMenu, leftScale ); ViewHelper.setScaleY( mMenu, leftScale ); ViewHelper.setAlpha( mMenu, 0.6f + 0.4f * ( 1 - scale ) ); ViewHelper.setTranslationX( mMenu, mMenuWidth * scale * 0.7f ); ViewHelper.setPivotX( mContent, 0 ); ViewHelper.setPivotY( mContent, mContent.getHeight() / 2 ); ViewHelper.setScaleX( mContent, rightScale ); ViewHelper.setScaleY( mContent, rightScale ); } @Override public boolean onInterceptTouchEvent( MotionEvent ev ) { return super.onInterceptTouchEvent( ev ) && touchReturn; } public void changeTouchReturn( boolean touchReturn ) { this.touchReturn = touchReturn; } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
在Android开发中,SlideMenu是一种常见的用户界面组件,它提供了一种从屏幕边缘滑动以显示隐藏菜单的方式,增强了应用的交互性和用户体验。这个压缩包文件"slidemenu"显然是一个实现Android SlideMenu功能的资源集合...
《Android SlideMenu 实现详解及应用》 在移动应用开发领域,用户界面的设计与交互体验至关重要,其中一种常见的设计模式就是SlideMenu,也就是侧滑菜单。Android SlideMenu 是一款能够帮助开发者快速实现类似QQ...
《Android SlideMenu框架详解》 在移动应用开发中,SlideMenu是一种常见的设计模式,它为用户提供了一种方便的方式来访问应用程序的主要功能或子菜单。在Android平台上,Yalantis公司开发的SlideMenu框架因其高效、...
6. **自定义视图**:开发者可能会创建自定义View类(如SlideMenu.java),以便更方便地管理和控制菜单的行为,如滑动范围、阻力效果等。 7. **兼容性**:为了确保在不同版本的Android系统上运行良好,项目可能已经...
在Android应用开发中,侧滑菜单(SlideMenu)是一种常见的设计模式,用于提供导航和功能选项。这种设计通常隐藏在屏幕边缘,用户可以向屏幕中心滑动来展示它。在本案例中,我们将探讨如何使用Android的`DrawerLayout...
是一个很好的一个控件,可以很方便地集成到项目中去,是一个老外写的,很好用 public class SlidingExample extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ...
标题“SlideMenu+PullToRefresh+ViewPager”揭示了一个Android应用开发中的特定技术组合,涉及到三个主要组件:SlideMenu(侧滑菜单),PullToRefresh(下拉刷新)和ViewPager(页面滑动视图)。这些组件在现代移动...
本教程将重点讲解如何在Android Studio中使用slideMenu实现这一效果。 首先,我们需要了解slideMenu的基本概念。Slide Menu通常是指一个位于主界面左侧或右侧的隐藏菜单,当用户滑动屏幕边缘时会滑出,显示额外的...
在Android应用开发中,滑动菜单(Slide Menu)是一种常见的设计模式,用于提供侧边栏导航,用户可以通过向左或向右滑动主屏幕来显示或隐藏菜单。这种设计使得应用界面更加直观,同时提供了丰富的功能选项。"android ...
模拟横向的slidmenu ,自定义了一个viewgroup 来实现纵向的模拟slidmenu的功能
android-slideMenu A slide menu component like QQ5.0 ##效果图: ##简介: 该项目实现了类似QQ5.0的侧滑菜单效果,支持直接拖动以及侧滑手势,同时可以用按钮控制菜单的开关。 ##用法: clone此项目至本地 将本项目...
通过SlidingMenu+Viewpager实现当前最流行的侧滑 通过SlidingMenu库与Fragment来实现当前最为流行的侧滑模式。其实涉及到的知识点有: 1.SlidingMenu 2.Fragment 通过layout构建一个Fragment ...
本教程将基于一个名为"SlideMenu"的开源项目,指导你如何创建一个简单的Android应用,实现类似Google Play、Facebook等应用的侧滑效果。 首先,你需要了解`SlideMenu`库。`SlideMenu`是由Johann C. Freytag开发的,...
在Android应用开发中,SlideMenu是一种常见的导航设计模式,它为用户提供了一种平滑、直观的方式来访问应用程序的主要功能或子菜单。SlideMenu通常出现在屏幕的边缘,用户可以通过滑动来显示或隐藏菜单,增强了用户...
在Android应用开发中,SlideMenu是一种常见的交互设计,它允许用户通过从屏幕边缘滑动来显示或隐藏侧边栏菜单,通常用于实现导航功能。这个"Android高级应用源码-slidemenu左右菜单滑动.rar"包含了一个实现SlideMenu...
总之,“侧滑菜单slideMenu 修改 实用版”是一个经过优化的Android组件,旨在简化开发过程,提供更好的用户体验。通过深入研究和实践,你可以提升自己的Android开发技能,并在项目中实现高效、美观的侧滑菜单功能。
在Android应用开发中,侧滑菜单(SlideMenu)是一种常见的设计模式,用于提供导航和功能选项,用户可以向左或向右滑动主界面来显示隐藏的侧边栏。SlideMenu通常包含主导航链接,帮助用户在应用的不同部分之间轻松...
滑动侧边栏(SlideMenu)是Android应用中常见的设计模式,它允许用户通过从屏幕边缘滑动来显示或隐藏一个侧边菜单。这种交互方式为应用提供了更多的导航选项,通常用于实现主菜单、设置或其他功能的快捷入口。在...
在Android开发中,QQSlideMenu是一种常见的实现侧滑菜单效果的方式。这个库是基于QQ的菜单视图类,为开发者提供了便捷地创建类似QQ应用那样的滑动导航菜单。本文将深入探讨如何使用QQSlideMenu来实现在Android项目中...
在Android应用开发中,SlideMenu是一种常见的设计模式,它为用户提供了一种优雅的方式来展示附加的选项或功能,通常通过从屏幕边缘向内滑动来触发。这种设计元素被广泛应用于许多应用程序,包括著名的QQ,其主页就...