美文网首页
Android 仿饿了么下拉Dialog

Android 仿饿了么下拉Dialog

作者: 周蛋蛋 | 来源:发表于2019-04-02 16:20 被阅读0次

今天点餐的时候看见一个好看的下拉Dialog,感觉后期会用的到,所以,今天打算撸一个

BottomSheetDialogFragment

需要用到这个控件,但是这个控件属于design这个包下面

import android.support.design.widget.BottomSheetDialogFragment;

如果我们项目中没有的话,那么,我们需要引入这个

    implementation 'com.android.support:design:28.0.0'

1.开始创建BaseBottomSheetDialogFragment


public class BaseBottomSheetDialog extends BottomSheetDialogFragment {
    private FrameLayout bottomSheet;
    public BottomSheetBehavior<FrameLayout> behavior;

    @Override
    public void onStart() {
        super.onStart();

        BottomSheetDialog dialog = (BottomSheetDialog) getDialog();
        bottomSheet = dialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet);
        if (bottomSheet != null) {
            CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomSheet.getLayoutParams();
            layoutParams.height = getHeight();
            bottomSheet.setLayoutParams(layoutParams);
            behavior = BottomSheetBehavior.from(bottomSheet);
            behavior.setPeekHeight(getHeight());
            // 初始为展开状态
            behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    }

    @Override
    public int getTheme() {
        return R.style.basedialog_anim_style;
    }

    protected int getHeight() {
        return getResources().getDisplayMetrics().heightPixels;
    }

代码copy以后,发现我们缺少一个style,那么我们在直接copy

<style name="basedialog_anim_style" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@color/transparent</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:backgroundDimAmount">0.6</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowAnimationStyle">@style/dialog_animation</item>
    </style>
    <style name="dialog_animation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>
    </style>
这段代码copy过去以后,又发现缺少一个anima,继续copy,第一个是dialog_ente,第二个是dialog_exit
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="100%p"
        android:toYDelta="0"
        android:duration="300" />
</set>
 fromXDelta 属性为动画起始时 X坐标上的位置  
                toXDelta   属性为动画结束时 X坐标上的位置  
                fromYDelta 属性为动画起始时 Y坐标上的位置  
                toYDelta   属性为动画结束时 Y坐标上的位置  
                注意:  
                         没有指定,  
                         默认是以自己为相对参照物  
            长整型值:  
                duration  属性为动画持续时间  
                说明:   时间以毫秒为单位  
在这些属性里面还可以加上%和p,例如:
android:toXDelta="100%",表示自身的100%,也就是从View自己的位置开始。
android:toXDelta="80%p",表示父层View的80%,是以它父层View为参照的。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate
          android:fromYDelta="100%p"
          android:toYDelta="0"
          android:duration="300" />
</set>

2.前面copy以后,接着我们上代码

在创建一个class

public class MyBottomSheetDialog extends BaseBottomSheetDialog {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_comment, container);
        return view;
    }

    @Override
    protected int getHeight() {
        return getResources().getDisplayMetrics().heightPixels - 400;
    }

缺少一个.dialog_comment布局,贴出来
<?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="@drawable/roundmiddle_bgwhite_top"/>

缺少一个drawable,我们继续贴出来 roundmiddle_bgwhite_top.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:topLeftRadius="10dp" android:topRightRadius="10dp"
        android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
    <solid android:color="#fff"/>
</shape>

3.Activity用起来

        findViewById(R.id.btn_popup).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyBottomSheetDialog dialog = new MyBottomSheetDialog();
                dialog.show(getSupportFragmentManager(), "");
            }
        });

这些代码全部拷过去以后,效果实现了,简直爽的一批;

解释一下.不然小伙伴可能有些方法不明白

  @Override
    protected int getHeight() {
        return getResources().getDisplayMetrics().heightPixels - 400;
    }

这个是返回DIalog的高度,-400说简单点就是marginTop的意思.但是这里的400可是像素啊.来看个效果图就明白了

减少400的效果图
400的截图.png
减少1000的效果图
1000.png

相关文章

  • Android 仿饿了么下拉Dialog

    今天点餐的时候看见一个好看的下拉Dialog,感觉后期会用的到,所以,今天打算撸一个 需要用到这个控件,但是这个控...

  • AD Dialog仿饿了么弹窗

    某些APP上广告弹窗效果是这样的, ,自己看了一下结合以前的弹窗代码自己也写了个简单的DEMO。 先看最终效果 弹...

  • android精仿今日头条源码,饿了么点餐源码等

    Android精选源码 仿饿了么点餐页面 精仿今日头条 Android漂亮的音乐歌词控件,仿网易云音乐滑动效果 A...

  • 仿饿了么

    1. 完成资源整合+项目(目录)结构设计+mock数据引用 完成的svg文件要生成字体icon文件可以上icomo...

  • 沪江学习Android端应用架构重构

    第154期:沪江学习Android端应用架构重构 Android开发 仿饿了么加入购物车旋转控件 - 自带闪转腾挪...

  • 仿饿了么物品详情-android

    发现网上没人贡献这一效果,所以决定贡献一下. 希望大家给个星呗. https://github.com/wu464...

  • 仿饿了么动画

    仿饿了么动画 最近项目Release完毕,闲暇之余给公司内部的小卖部app升下级(一个人撸完了design+cod...

  • vue(6) - 收藏集 - 掘金

    低仿饿了么 H5 - 纯前端 Vue 版 + 手把手教学 - 前端 - 掘金低仿饿了么H5-纯前端Vue版+手把手...

  • Android仿饿了么购物车效果

    先看下效果图: 1.首先列表布局采用Recycleview 2.购物车item布局 3.点击加号操作这里分二钟情况...

  • Android端 仿饿了么点餐页面

    已实现的功能 * 顶部嵌套滑动逻辑 * 分类和商品级联定位 * 添加购物车动画 * 购物车弹窗 * 点击商品后的上...

网友评论

      本文标题:Android 仿饿了么下拉Dialog

      本文链接:https://www.haomeiwen.com/subject/ujlgbqtx.html