`
zhifeiji512
  • 浏览: 119232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SlidingDrawer 使用

 
阅读更多

 

关于SlidingDrawer控件

 

1.重要属性

  android:allowSingleTap:指示是否可以通过handle打开或关闭

  android:animateOnClick:指示是否当使用者按下手柄打开/关闭时是否该有一个动画。

  android:content:隐藏的内容

  android:handle:handle(手柄)

2.重要方法

  animateClose():关闭时实现动画。

  close():即时关闭

  getContent():获取内容

  isMoving():指示SlidingDrawer是否在移动。

  isOpened():指示SlidingDrawer是否已全部打开

  lock():屏蔽触摸事件。

  setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener):SlidingDrawer关闭时调用

  unlock():解除屏蔽触摸事件。

  toggle():切换打开和关闭的抽屉SlidingDrawer。

 

实例:

自定义SlidingDrawer控件,为得是在SlidingDrawer关闭的状态下,显示content内容

 

package com.borqs.music.lyric;

import android.content.Context;
import android.graphics.Canvas;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.SlidingDrawer;

public class LyricSlidingDrawer extends SlidingDrawer {

    public LyricSlidingDrawer(Context paramContext, AttributeSet paramAttributeSet) {
        this(paramContext, paramAttributeSet, 0);
    }

    public LyricSlidingDrawer(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
        super(paramContext, paramAttributeSet, paramInt);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        long time = getDrawingTime();
        View handle = super.getHandle();
        View content = super.getContent();
        drawChild(canvas, handle, time);
        if (!isOpened() || isMoving()) {
            canvas.save();
            float f2 = handle.getBottom() - content.getTop();
            canvas.translate(0, f2);
            drawChild(canvas, content, time);
            canvas.restore();
        } else {
            super.dispatchDraw(canvas);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == Event.OFFLINE) {
            int i = super.getHandle().getBottom();
            int j = (int)event.getY();

            if (j > i) {
                int k = i+20;
                if (j <= k) {
                    animateToggle();
                }
            }
        }
        return super.onTouchEvent(event);
    }
}
 

 

 

SlidingDrawer完全打开时隐藏专辑图片,完全关闭时显示专辑图片:

 

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;

public class NowPlay extends Activity {
    private static final String TAG = "NowPlay";
	private LyricSlidingDrawer mSlidingDrawer;
	private ImageView mHandle;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
	    Log.d(TAG, "onCreate()");
		super.onCreate(savedInstanceState);

		setContentView(R.layout.now_play);

		mSlidingDrawer = (LyricSlidingDrawer) findViewById(R.id.lyrics_sliding_drawer);

		mHandle = (ImageView) findViewById(R.id.lyrics_handle_image);

		//监听打开抽屉事件
        mSlidingDrawer.setOnDrawerOpenListener(new C_SlidingDrawer.OnDrawerOpenListener() {
			@Override
			public void onDrawerOpened() {
				mHandle.setImageResource(R.drawable.lyrics_handle_expand);
				AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
	            animation.setDuration(1000);
	            animation.setStartOffset(500);
	            animation.setAnimationListener(new fadeAnimationListener());
	            mAlbum.startAnimation(animation);
			}
		});
        //监听关闭抽屉事件
        mSlidingDrawer.setOnDrawerCloseListener(new C_SlidingDrawer.OnDrawerCloseListener() {
			@Override
			public void onDrawerClosed() {
				mHandle.setImageResource(R.drawable.lyrics_handle_shrink);
                AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);
                animation.setDuration(1000);
                animation.setStartOffset(500);
                animation.setAnimationListener(new fadeAnimationListener());
                mAlbum.startAnimation(animation);
			}
		});

	}

    private class fadeAnimationListener implements AnimationListener{
        public void onAnimationEnd(Animation animation) {
        }
        public void onAnimationRepeat(Animation animation) {
        }
        public void onAnimationStart(Animation animation) {
            if (mSlidingDrawer.isOpened()) {
                mAlbum.setVisibility(View.GONE);
                findViewById(R.id.rs_button_area).setVisibility(View.GONE);
            } else {
                mAlbum.setVisibility(View.VISIBLE);
            }
        }

    }

 

所使用的Layout, 注意SlidingDrawer的相对位置!

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/parent">

    <TextView android:id="@+id/trackname"
   		android:textSize="18sp"
        android:singleLine="true"
        android:ellipsize="end"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dip"
        android:layout_alignParentTop="true" />

    <ImageView android:id="@+id/album"  android:layout_below="@id/trackname"
    	android:layout_centerHorizontal="true"
        android:background="@drawable/album_border_large"
        android:layout_width="180dip"
        android:layout_height="180dip"
        android:layout_marginTop="8dip"/>

 	<com.borqs.music.lyric.LyricSlidingDrawer android:id="@+id/lyric_slidingdrawer"
	        android:layout_below="@id/trackname"
		android:layout_above="@id/player_common_area"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:orientation="vertical"
		android:handle="@+id/handle"
		android:content="@+id/lyric_view"
		android:bottomOffset="-75dip"
		android:topOffset="0dip"
		android:animateOnClick="true">
		<ImageButton android:id="@id/handle"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:background="@drawable/lyr_handle_collapse_xml"/>
    	<com.borqs.music.lyric.LyricsView android:id="@id/lyric_view"
	        android:layout_width="fill_parent"
	        android:layout_height="fill_parent"
	        android:paddingTop="2dip"
	        android:paddingBottom="2dip"
	        android:paddingLeft="2dip"
	        android:paddingRight="2dip"/>
	</com.borqs.music.lyric.LyricSlidingDrawer>
</RelativeLayout>

 


分享到:
评论

相关推荐

    SlidingDrawer侧滑抽屉

    在Android Studio 3.0版本中,虽然SlidingDrawer已被弃用,但它仍然是许多老项目中的常见元素,理解其工作原理和使用方法对维护这些项目至关重要。 **一、SlidingDrawer基本概念** SlidingDrawer是Android SDK提供...

    android slidingdrawer完整包

    1. **在XML布局文件中添加SlidingDrawer**:使用`&lt;SlidingDrawer&gt;`标签,并设置`android:handle`为手柄视图的ID,`android:content`为内容视图的ID。 2. **设置属性**:可以设置抽屉的开启状态(`android:open`)、...

    Android SlidingDrawer抽屉效果

    综上所述,虽然 SlidingDrawer 在现代 Android 开发中已较少使用,但理解它的工作原理对于理解滑动抽屉的设计模式和如何在新组件中实现类似效果仍然是有价值的。如果你的项目还在使用 SlidingDrawer,可能需要考虑...

    Android学习笔记(二四):多页显示SlidingDrawer的使用.doc

    在本篇Android学习笔记中,我们将探讨如何使用SlidingDrawer实现多页显示,并理解其工作原理和相关属性。 首先,SlidingDrawer通常用于在主界面下方或上方滑出额外的内容,例如菜单、设置或附加信息。它有两个主要...

    android slidingdrawer实例

    总之,虽然SlidingDrawer已不再推荐使用,但了解它的基本原理和使用方法可以帮助我们更好地理解和实现Android中的滑动抽屉效果。在实际项目中,开发者应优先考虑使用更新的组件来保证应用的兼容性和最佳用户体验。

    Android的SlidingDrawer范例程序

    在Android开发中,`SlidingDrawer`是一个非常实用的组件,它允许用户通过手势从屏幕边缘滑动出一个隐藏的抽屉,常用于存放菜单、设置或其他附加功能。本范例程序深入展示了如何有效地实现这一功能,使得用户界面更加...

    SlidingDrawer(抽屉)

    总结来说,这个项目不仅涉及到SlidingDrawer的使用,还涵盖了GridView、Adapter模式和PackageManager的使用,是学习Android UI设计和数据绑定的好实例。对于初学者而言,这个项目提供了实践这些基础知识的机会,有助...

    sildingdraw使用demo

    提供的"SlidingDraw的使用"文件很可能是包含一个简单的SlidingDrawer使用示例,包含了XML布局和对应的Java代码。通过查看和运行这些代码,新手可以更好地理解SlidingDrawer的工作原理及其用法。 7. **注意事项** ...

    Android自带SlidingDrawer实例

    这个实例是专为初学者设计的,展示了如何使用SlidingDrawer从底部向上滑动的效果。 首先,我们需要了解SlidingDrawer的基本用法。在布局XML文件中,SlidingDrawer作为顶级容器添加,有两个必需的子元素:一个用于...

    android控件SlidingDrawer的学习应用

    SlidingDrawer的使用主要包括以下几个关键知识点: 1. **布局定义**:在XML布局文件中,我们需要添加SlidingDrawer标签,并设置相应的属性,如`android:handle`指定手柄(通常是按钮或图像),`android:content`...

    四个方向的SlidingDrawer实例

    需要注意的是,SlidingDrawer在Android API Level 17后已被弃用,推荐使用`android.support.v4.widget.DrawerLayout`或自定义视图实现类似功能。对于低版本的Android系统,可以继续使用SlidingDrawer,但在高版本中...

    Android-SlidingDrawer一个Android滑动抽屉支持ListViewScrollViewRecyclerView

    在早期的Android版本中,SlidingDrawer是开发者常用来创建侧边栏菜单的工具,但在Android设计指南推荐使用NavigationView之后,其使用频率有所下降。尽管如此,SlidingDrawer仍然在某些特定场景下有其独特的价值,...

    自定义四个方向上的SlidingDrawer(抽屉效果)

    同时,随着Android版本的更新,SlidingDrawer在新版本中可能已经被弃用,开发者也可以考虑使用其他替代组件,如CoordinatorLayout配合Behavior来实现类似的效果。 总之,自定义四个方向的SlidingDrawer需要对...

    android抽屉

    以下是一个简单的SlidingDrawer使用示例: ```xml &lt;SlidingDrawer android:layout_width="fill_parent" android:layout_height="fill_parent" android:handle="@+id/handle" android:content="@+id/content" ...

    SlidingDrawer抽屉效果可以默认显示一部分。

    在代码中,我们会使用R.id.drawer、R.id.handle和R.id.content来引用SlidingDrawer及其组件。 proguard.cfg文件是ProGuard配置,用于混淆和优化代码,提高应用的安全性和性能。而.classpath和.project是Eclipse或...

    安卓SlidingDrawer抽屉控件源码.zip

    例如,SlidingDrawer在Android 5.0(API级别21)后被弃用,建议使用其他的侧滑菜单库,如`android.support.design.widget.BottomSheetBehavior`或第三方库如SlideUpPanelLayout。源码中可能包含了这些兼容性处理的...

    SlidingDrawer抽屉式滑动效果

    ### SlidingDrawer的基本使用 在XML布局文件中,SlidingDrawer可以通过以下方式定义: ```xml &lt;SlidingDrawer android:id="@+id/sliding_drawer" android:layout_width="match_parent" android:layout_height=...

    android抽屉[收集].pdf

    以下是一个简单的SlidingDrawer使用示例: ```xml &lt;SlidingDrawer android:layout_width="fill_parent" android:layout_height="fill_parent" android:handle="@+id/handle" android:content="@+id/content" ...

Global site tag (gtag.js) - Google Analytics