GithubHelp home page GithubHelp logo

androidsweetsheet's Introduction

一个富有动感的 Sheet, 先发两张图: 原型.GIF

效果图.gif

Android Arsenal

Android Gems

我的微博

###gradle
/build.gradle

repositories {
    maven {
        url "https://jitpack.io"
    }
}

/app/build.gradle

compile 'com.github.zzz40500:AndroidSweetSheet:1.1.0'

###Usage:


// SweetSheet 控件,根据 rl 确认位置
mSweetSheet = new SweetSheet(rl);

//设置数据源 (数据源支持设置 list 数组,也支持从menu 资源中获取)
mSweetSheet.setMenuList(list);
//根据设置不同的 Delegate 来显示不同的风格.
mSweetSheet.setDelegate(new RecyclerViewDelegate(true));
//根据设置不同Effect来设置背景效果:BlurEffect 模糊效果.DimEffect 变暗效果,NoneEffect 没有效果.
mSweetSheet.setBackgroundEffect(new BlurEffect(8));
//设置菜单点击事件
mSweetSheet.setOnMenuItemClickListener(new SweetSheet.OnMenuItemClickListener() {
    @Override
    public boolean onItemClick(int position, MenuEntity menuEntity1) {

        //根据返回值, true 会关闭 SweetSheet ,false 则不会.
        Toast.makeText(MainActivity.this, menuEntity1.title + "  " + position, Toast.LENGTH_SHORT).show();
        return true;
    }
});

自定义扩展:


// SweetSheet 控件,根据 rl 确认位置
mSweetSheet3 = new SweetSheet(rl);
//定义一个 CustomDelegate 的 Delegate ,并且设置它的出现动画.
CustomDelegate customDelegate = new CustomDelegate(true,
        CustomDelegate.AnimationType.DuangLayoutAnimation);
View view = LayoutInflater.from(this).inflate(R.layout.layout_custom_view, null, false);
//设置自定义视图.
customDelegate.setCustomView(view);
//设置代理类
mSweetSheet3.setDelegate(customDelegate);
//因为使用了 CustomDelegate 所以mSweetSheet3中的 setMenuList和setOnMenuItemClickListener就没有效果了
view.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mSweetSheet3.dismiss();
    }
});

监听返回

    @Override
    public void onBackPressed() {
 
        if(mSweetSheet.isShow()){

            mSweetSheet.dismiss();
        }
        else{
            super.onBackPressed();
        }
    }

###v1.1(版本说明)

  1. 去掉之前ViewPager 使用FragmentStatePagerAdapter 做为它的适配器.
  • SweetSheet 不支持 LinearLayout 作为它的父控件.

  • setMenuList 设置数据源支持从 List数组和Menu资源的填充.(Menu仅支持一级Menu,因为2级Menu我还没想好怎么展示).

  • setBackgroundEffect(Effect effect) 提供对背景效果的支持,目前提供3种风格: BlurEffect:模糊效果,DimEffect 变暗效果,NoneEffect 没有效果. 你也可以继承Effect扩展背景的效果

  • setDelegate 目前提供了三种风格 RecyclerViewDelegate,ViewPagerDelegate,CustomDelegate.

  • CustomDelegate用于扩展类,你可以使用通过构造方法指定出现动画,通过setCustomView(View v)来设置你的自定义的布局.

  • CustomDelegate中提供了4种类型: DuangLayoutAnimation,DuangAnimation, AlphaAnimation,Custom: 看名字大概就能知道它是什么效果.如果你对前3个效果不满意你就使用 Custom ,然后通过setCustomViewAnimation设置出现效果.

  • CRImageView 内部实现了 Android 5.0上面的CircleReveal效果.使用方法:CRImageView. circularReveal(int centerX, int centerY, float startRadius, float endRadius, long duration, Interpolator interpolator)你可以在你的项目中用上它.

###FAQ 怎么使包括 actionBar 在内的背景也虚化? 使用 一个 FrameLayout或者RelativeLayout 里面使用 ToolBar 来替代 ActionBar 将这个 FrameLayout 或者RelativeLayout作为SweetSheet 的父控件传递进去,

androidsweetsheet's People

Contributors

mderis avatar zzz40500 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androidsweetsheet's Issues

How to disable scroll of custom view

Hey I just created a custom view using this. How can I disable the white background that the custom view has and the top bar that is used to pull it up or down?

I just want the custom view to pop up and pop down thats it.
screenshot 2016-01-02 20 14 55

java.lang.IllegalStateException: Cannot start this animator on a detached view!

java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.view.RenderNode.addAnimator(RenderNode.java:817)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:277)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:261)
at android.animation.RevealAnimator.(RevealAnimator.java:37)
at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:48)
at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:64)
at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:52)
at com.mingle.widget.CRImageView.circularReveal(CRImageView.java:84)
at com.mingle.sweetpick.CustomDelegate$AnimationImp.onEnd(CustomDelegate.java:180)
at com.mingle.widget.SweetView$4.onAnimationEnd(SweetView.java:126)
at com.nineoldandroids.animation.ValueAnimator.endAnimation(ValueAnimator.java:1034)
at com.nineoldandroids.animation.ValueAnimator.access$900(ValueAnimator.java:43)
at com.nineoldandroids.animation.ValueAnimator$AnimationHandler.handleMessage(ValueAnimator.java:669)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

java.lang.IllegalStateException:

java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.view.RenderNode.addAnimator(RenderNode.java:812)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:300)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:282)
at android.animation.RevealAnimator.(RevealAnimator.java:37)
at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:55)
at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:64)
at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:52)
at com.mingle.widget.CRImageView.circularReveal(CRImageView.java:84)
at com.mingle.sweetpick.CustomDelegate$AnimationImp.onEnd(CustomDelegate.java:180)
at com.mingle.widget.SweetView$4.onAnimationEnd(SweetView.java:126)
at com.nineoldandroids.animation.ValueAnimator.endAnimation(ValueAnimator.java:1034)
at com.nineoldandroids.animation.ValueAnimator.access$900(ValueAnimator.java:43)
at com.nineoldandroids.animation.ValueAnimator$AnimationHandler.handleMessage(ValueAnimator.java:669)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5438)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)

作者,你好,我遇到一个bug。

作者你好,这个库,相当不错,我使用和分析代码后,将其运用到自己的项目中,结果在使用过程中出现了一个bug:
10-21 12:36:57.174 16444-16444/ E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2821)
at android.view.View.draw(View.java:13513)
at android.view.View.getDisplayList(View.java:12461)
at android.view.View.getDisplayList(View.java:12505)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2934)
at android.view.View.getDisplayList(View.java:12397)
at android.view.View.getDisplayList(View.java:12505)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2934)
at android.view.View.getDisplayList(View.java:12397)
at android.view.View.getDisplayList(View.java:12505)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2934)
at android.view.View.getDisplayList(View.java:12397)
at android.view.View.getDisplayList(View.java:12505)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2934)
at android.view.View.getDisplayList(View.java:12397)
at android.view.View.getDisplayList(View.java:12505)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1187)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2149)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2021)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1832)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4216)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5004)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
上述log提示我绘制错误,我关闭硬件加速,出现softwaredraw的错误,不知道是什么地方的问题,这困惑了我很久。

gradle

你好,请问下为什么AS使用gradle下载不下来你的代码啊?

Slide

Can we implement SweetSheet library like Android SlidingPaneLayout ?

关于返回Dismiss

控件效果很好,我这里有个小建议,关于按返回键Dismiss的。
一般情况是,如果在控件已经弹出,点击返回键,A:让其dismiss,B:要么什么都不做(也不finish,控件在弹出状态下finish实在太奇怪了)。
所以每次使用弹出框的时候,监听返回键是必须的。如果每次都要实现onBackPress(),必须在Activity中有效不说,其次是Activity要拿到mSheet的引用,封装起来很不方便。
查了一下资料,可以通过setOnKeyListener()来监听键盘事件,可能需要等界面绘制完成才能获取焦点?所以加了post。
亲测有效。
这样的话,可以向外提供返回键的响应模式(上面提到的A、B);
最后还是感谢你的控件,写得很不错~

mBg.post(new Runnable() {
@OverRide
public void run() {
mBg.setFocusableInTouchMode(true);
mBg.setOnKeyListener(new View.OnKeyListener() {
@OverRide
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
dismiss();
return true;
}
return false;
}
});
}
});

Crashes

Clicking rapidly on custom views causes crash. kindly view the log

 Process: .buttomsheet, PID: 26272
  java.lang.IllegalStateException: Cannot start this animator on a detached view!
at android.view.RenderNode.addAnimator(RenderNode.java:817)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:300)
at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:282)
at android.animation.RevealAnimator.<init>(RevealAnimator.java:37)
at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:53)
at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:64)
at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:52)
at com.mingle.widget.CRImageView.circularReveal(CRImageView.java:84)
at com.mingle.sweetpick.CustomDelegate$AnimationImp.onEnd(CustomDelegate.java:180)
at com.mingle.widget.SweetView$4.onAnimationEnd(SweetView.java:126)
at com.nineoldandroids.animation.ValueAnimator.endAnimation(ValueAnimator.java:1034)
at com.nineoldandroids.animation.ValueAnimator.access$900(ValueAnimator.java:43)
at com.nineoldandroids.animation.ValueAnimator$AnimationHandler.handleMessage(ValueAnimator.java:669)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5643)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)```

支持更新

支持新增一個dismiss listener, 設置彈出速度 二級聯動

RecyclerViewDelegate特效无法使用

点击之后直接应用崩溃
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@347765a3
at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1282)
at android.graphics.Canvas.setBitmap(Canvas.java:216)
at android.view.View.buildDrawingCacheImpl(View.java:14438)
at android.view.View.buildDrawingCache(View.java:14339)
at android.view.View.getDrawingCache(View.java:14246)
at android.view.View.draw(View.java:14933)
at android.view.ViewGroup.drawChild(ViewGroup.java:3426)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3219)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild(ViewGroup.java:3426)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3219)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild(ViewGroup.java:3426)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3219)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild(ViewGroup.java:3426)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3219)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild(ViewGroup.java:3426)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3219)
at android.view.View.draw(View.java:15234)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2650)
at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2644)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2557)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

连续show两次,报错

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:4310)
at android.view.ViewGroup.addView(ViewGroup.java:4146)
at android.view.ViewGroup.addView(ViewGroup.java:4118)
at com.mingle.sweetpick.CustomDelegate.show(CustomDelegate.java:124)
at com.mingle.sweetpick.SweetSheet.show(SweetSheet.java:115)
at com.acgcode.template.MainActivity$1.onClick(MainActivity.java:81)
at android.view.View.performClick(View.java:5207)
at android.view.View$PerformClick.run(View.java:21177)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5458)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

应该是控件内部没有执行完,需要考虑执行完才能进行下一次show

在Fragment中使用CustomDelegate的setDelegate报NullPointerException

sheet = new SweetSheet(mRootView);
CustomDelegate customDelegate = new CustomDelegate(true, CustomDelegate.AnimationType.DuangLayoutAnimation);
View mSheetView = LayoutInflater.from(getActivity()).inflate(R.layout.disc_near_shop_bottom_sheet, null, false);
customDelegate.setCustomView(mSheetView);
sheet.setDelegate(customDelegate);

Not working in android 4.4.2

Hi,

I have integrated this lib in the application, but it crashes the app in android 4.4.2, can anybody help with it?

Thanks

Impossible to resolve repo

Hello,

After adding the line
maven { url "https://jitpack.io" }

and the gradle compile line : compile 'com.github.zzz40500:AndroidSweetSheet:1.1.0'

I still have : Failed to resolve: com.github.zzz40500:androidsweetsheet:1.1.0

Do you have any fix of this error please ?

Thank you !

连续点击过快会造成崩溃

java.lang.IllegalStateException: Cannot start this animator on a detached view! at android.view.RenderNode.addAnimator(RenderNode.java:817) at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:277) at android.view.RenderNodeAnimator.setTarget(RenderNodeAnimator.java:261) at android.animation.RevealAnimator.<init>(RevealAnimator.java:37) at android.view.ViewAnimationUtils.createCircularReveal(ViewAnimationUtils.java:48) at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:64) at com.mingle.widget.CircleRevealHelper.circularReveal(CircleRevealHelper.java:52) at com.mingle.widget.CRImageView.circularReveal(CRImageView.java:84) at com.mingle.sweetpick.CustomDelegate$AnimationImp.onEnd(CustomDelegate.java:180) at com.mingle.widget.SweetView$4.onAnimationEnd(SweetView.java:126) at com.nineoldandroids.animation.ValueAnimator.endAnimation(ValueAnimator.java:1034) at com.nineoldandroids.animation.ValueAnimator.access$900(ValueAnimator.java:43) at com.nineoldandroids.animation.ValueAnimator$AnimationHandler.handleMessage(ValueAnimator.java:669) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5264) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

我在外面添加了防抖动点击,依然会崩溃。所以我认为是里面onclick的dismiss的动画问题,如果增加动画的防抖动点击可以修复这个BUG。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.