Android 如何从屏幕底部向上滑出一个view

Android 如何从屏幕底部向上滑出一个view

我的实现方式是使用Android 中的dialog实现的,直接看下面的代码步骤

1、定义dialog的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_layout_border_shop"
            android:orientation="vertical">
            <!--名称+价格-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="15dp"
                android:background="@drawable/bg_layout_border_shop"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/tv_home_shop_dishes_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/colorBlack"
                    android:textSize="16sp"
                    android:text="蛋卷"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"/>
                <TextView
                    android:id="@+id/tv_home_shop_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="16sp"
                    android:textColor="@color/colorOrange"
                    android:text="5元/包"/>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_layout_border_shop"
                android:padding="15dp"
                android:orientation="vertical">
                <TextView
                    android:textSize="16sp"
                    android:textColor="@color/colorBlack"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="份量"/>
                <RadioGroup
                    android:id="@+id/rg_register_sex"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:layout_marginTop="10dp"
                    android:layout_centerVertical="true">
                    <RadioButton
                        android:id="@+id/rb_home_shop_lt"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:background="@drawable/selector_home_shop_border"
                        android:textColor="@drawable/selector_home_rb_text"
                        android:padding="8dp"
                        android:textSize="14sp"
                        android:layout_marginRight="8dp"
                        android:button="@null"
                        android:text="小份"/>
                    <RadioButton
                        android:id="@+id/rb_home_shop_eq"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:background="@drawable/selector_home_shop_border"
                        android:textColor="@drawable/selector_home_rb_text"
                        android:padding="8dp"
                        android:textSize="14sp"
                        android:layout_marginRight="8dp"
                        android:button="@null"
                        android:text="中份"/>
                    <RadioButton
                        android:id="@+id/rb_home_shop_gt"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:background="@drawable/selector_home_shop_border"
                        android:textColor="@drawable/selector_home_rb_text"
                        android:padding="8dp"
                        android:textSize="14sp"
                        android:layout_marginRight="8dp"
                        android:button="@null"
                        android:text="大份"/>
                </RadioGroup>
            </LinearLayout>
            <!--购买数量-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_layout_border_shop"
                android:padding="15dp"
                android:orientation="horizontal">
                <TextView
                    android:textColor="@color/colorBlack"
                    android:textSize="16sp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="购买数量"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"/>
                <LinearLayout

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/bg_layout_sms_border"
                    android:orientation="horizontal">
                    <TextView
                        android:id="@+id/tv_shop_minus"
                        android:textColor="@color/colorBlack"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="4dp"
                        android:text="  -  "/>
                    <EditText
                        android:id="@+id/et_shop_number"
                        android:layout_width="50dp"
                        android:background="@drawable/bg_layout_shop_border1"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:padding="4dp"
                        android:text="1"/>
                    <TextView
                        android:id="@+id/tv_shop_plus"
                        android:textColor="@color/colorBlack"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="4dp"
                        android:text="  +  "/>
                </LinearLayout>
            </LinearLayout>

            <!--加入购物车-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/tv_home_shop_price_num"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="18sp"
                    android:layout_weight="1"
                    android:textColor="@color/colorOrange"
                    android:text="¥ 5 "/>

                <Button
                    android:id="@+id/btn_shop"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="18sp"
                    android:background="@drawable/bg_layout_btn_radius_border"
                    android:textColor="@color/colorWhite"
                    android:padding="8dp"
                    android:text="加入购物车"/>
            </LinearLayout>

        </LinearLayout>
    </ScrollView>

</LinearLayout>

2、定义一个类,然后直接继承dialog

package com.dx.jingle.dialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.dx.jingle.R;
import com.dx.jingle.bean.DishesVoBean;
import com.dx.jingle.bean.ShoppingCartBean;
import com.dx.jingle.util.MainUtil;
import java.math.BigDecimal;

public class HomeShopDialog extends Dialog {
    private Context context;
    private DishesVoBean dishesVo;
    private OnItemClickListener onItemClickListener;
    private String strShop;
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public HomeShopDialog(@NonNull Context context, DishesVoBean dishesVos) {
        super(context);
        this.context=context;
        this.dishesVo=dishesVo;
    }
    public HomeShopDialog(@NonNull Context context, int themeResId, DishesVoBean dishesVo) {
        super(context, themeResId);
        this.context=context;
        this.dishesVo=dishesVo;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置布局
        setContentView(R.layout.dialog_home_shop);
    }
    }
    public interface OnItemClickListener{
        void onBtnPlusClick(View view, ShoppingCartBean data, DishesVoBean datas);
    }
}

3、然后自定义一个点击事件

 //设置点击事件
        rvReserveHomeAdapter.setOnItemClickListener(new RvReserveHomeAdapter.OnItemClickListener() {
            @Override
            public void onBtnPlusClick(View view, DishesVoBean data, int position) {
                //1、初始化Dialog
                HomeShopDialog dialog=new HomeShopDialog(mActivityContext,R.style.DialogTheme,data);
                //获取Dialogwindow对象
		        Window window=dialog.getWindow();
		        //设置弹出位置
		        window.setGravity(Gravity.BOTTOM);
		        //设置动画
		        window.setWindowAnimations(R.style.dialog_menu_animStyle);
		        //设置对话框大小
		        window.getDecorView().setPadding(0,0,0,0);
		        WindowManager.LayoutParams layoutParams=window.getAttributes();
		        //设置宽度和高度
		        layoutParams.width= WindowManager.LayoutParams.MATCH_PARENT;
		        layoutParams.height=WindowManager.LayoutParams.WRAP_CONTENT;
		        //显示Dialog
		        dialog.show();

            }
        });

4、在styles.xml中设置dialog的样式

<!-- dialog的动画 -->
    <style name="DialogTheme" parent="@android:style/Theme.Dialog">
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 模糊 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 遮罩层 -->
        <item name="android:backgroundDimAmount">0.5</item>
    </style>
    <!-- dialog的动画 -->
    <style name="dialog_menu_animStyle">
        <item name="android:windowEnterAnimation">@anim/dialog_in_anim</item>
        <item name="android:windowExitAnimation">@anim/dialog_out_anim</item>
    </style>

5、定义关闭与打开的动画效果

//结束
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:fromYDelta="0%p"
        android:toXDelta="0"
        android:toYDelta="100%p" />
</set>

//打开
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--
    有四种动画:alpha (透明变化) translate(位置移动) scale(缩放) rotate(旋转),
    android:duration: 动画运行时间,定义在多次时间(ms)内完成动画
    android:startOffset: 延迟一定时间后运行动画
    fromXDelta: X轴方向开始位置,可以是%,也可以是具体的像素 具体见图
    toXDelta: X轴方向结束位置,可以是%,也可以是具体的像素
    fromYDelta: Y轴方向开始位置,可以是%,也可以是具体的像素
    toYDelta: Y轴方向结束位置,可以是%,也可以是具体的像素
    -->
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:fromYDelta="100%p"
        android:toXDelta="0"
        android:toYDelta="0%p" />
</set>

效果图:
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值