博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 关于BottomDialogSheet 与Layout擦出爱的火花?
阅读量:6253 次
发布时间:2019-06-22

本文共 8385 字,大约阅读时间需要 27 分钟。

今天上班做那个相似于ios拍照的那种效果图 就是个垂直布局然后里面textview+切割线+textview+button

当然也能够用button+切割线+button
方法有非常多,选择适合自己的即可。

1、首先看下何为bottomsheetdialog,曾经Bottom Sheet是在support library 23.2之后提供的一个新控件。也就是须要用6.0以上的SDK进行编译才干够使用此控件

以下看下我当前的sdk版本是25因此使用全然没问题

这里写图片描写叙述

2、看下我之前的布局

代码例如以下:

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" android:background="@color/transparent" android:orientation="vertical" android:gravity="bottom"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="8dp" android:background="@drawable/round_corner" android:orientation="vertical" > <TextView android:id="@+id/tv_take_photo" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:clickable="true" android:background="@drawable/round_corner" android:textColor="#cd0000" android:text="拍照"/> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> <TextView android:id="@+id/tv_picture_choose" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:gravity="center" android:background="@drawable/round_corner" android:textColor="#0174E1" android:text="从相冊中选择"/> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:padding="1dp"> <Button android:id="@+id/btn_cancle" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="8dp" android:textColor="#0174E1" android:layout_marginBottom="10dp" android:background="@drawable/round_corner" android:text="取消" /> </RelativeLayout> </LinearLayout>

效果例如以下

这里写图片描写叙述

这不是我想要的。然后看下UI给我的原型图

这里写图片描写叙述

我去这不是想要的,为什么会出现这种情况,是不是设置margin的原因,好吧。那我找一下,好像不是啊!然后看到自己在这里设置了背景为半透明把这个去掉试试

这里写图片描写叙述

好像并没什么卵用。这究竟是什么鬼,今天上班眼镜也没有戴,感觉真的像个瞎子一样!

晕!

那么继续找,问题出现了肯定要解决,最后找到了原来我在最外面那个线性布局设置了一个pading=8dp好吧我真是对自己感到失望,这技术能够退出android界了,玩不下去了!

然后把它设置为0dp试试!然后有个网友说设置0dp跟没设置一样,看看究竟是不是一样?我们一试便知晓。

这里写图片描写叙述

这里不设置pading=0dp试试!

这里写图片描写叙述

效果图

这里写图片描写叙述

大家应该看到了肯定不行的

再看下我的背景round_corner.xml 代码例如以下

当设置为pading=0dp时候

看效果

这里写图片描写叙述

完美显示

看下我显示dialog的代码

private void showBottomDialog() {        final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);        View view = View.inflate(this, R.layout.activity_popwind, null);        dialog.setContentView(view);        dialog.setCanceledOnTouchOutside(true);        view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));        Window dialogWindow = dialog.getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;        lp.gravity = Gravity.BOTTOM;        dialogWindow.setAttributes(lp);        dialog.show();        final TextView takepicture = (TextView) view.findViewById(R.id.tv_take_photo);        final TextView choosePicture = (TextView) view.findViewById(R.id.tv_picture_choose);        final Button cancel = (Button) view.findViewById(R.id.btn_cancle);        /**         * 拍照         */        takepicture.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                takePic();            }        });        //选择照片        choosePicture.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                choosePic();            }        });        //取消        cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //dialog.dismiss();                dialog.cancel();            }        });    }

从相冊选择照片上传并设置到ImageView显示

public void choosePic() {        Intent openAlbumIntent = new Intent(                Intent.ACTION_GET_CONTENT);        openAlbumIntent.setType("image/*");        startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);    }

裁剪图片简单实现

/**     * 裁剪图片方法实现     *     * @param uri     */    protected void startPhotoZoom(Uri uri) {        if (uri == null) {            Log.i("tag", "The uri is not exist.");        }        tempUri = uri;        Intent intent = new Intent("com.android.camera.action.CROP");        intent.setDataAndType(uri, "image/*");        // 设置裁剪        intent.putExtra("crop", "true");        // aspectX aspectY 是宽高的比例        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        // outputX outputY 是裁剪图片宽高        intent.putExtra("outputX", 150);        intent.putExtra("outputY", 150);        intent.putExtra("return-data", true);        startActivityForResult(intent, CROP_SMALL_PICTURE);    }

图片上传至server

private void uploadPic(Bitmap bitmap) {        // 上传至server        // 能够在这里把Bitmap转换成file,然后得到file的url,做文件上传操作        // 注意这里得到的图片已经是圆形图片了        // bitmap是没有做个圆形处理的,但已经被裁剪了        String imagePath = Utils.savePhoto(bitmap, Environment                .getExternalStorageDirectory().getAbsolutePath(), String                .valueOf(System.currentTimeMillis()));        Log.e("imagePath", imagePath + "");        if (imagePath != null) {            // 拿着imagePath上传        }    }

回调依据不同的resultCode分别进行处理

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        // TODO Auto-generated method stub        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == RESULT_OK) {            switch (requestCode) {                case TAKE_PICTURE:                    startPhotoZoom(tempUri);// 開始对图片进行裁剪处理                    break;                case CHOOSE_PICTURE:                    startPhotoZoom(data.getData()); // 開始对图片进行裁剪处理                    break;                case CROP_SMALL_PICTURE:                    if (data != null) {                        setImageToView(data); // 让刚才选择裁剪得到的图片显示在界面上                    }                    break;                default:                    break;            }        }    }

总结:

1、由于自己菜
2、由于自己粗心
3、由于自己实在是菜

转载请注明出处!

补充:

package com.visoport.medicine.util;import android.content.Context;import android.util.DisplayMetrics;import android.view.WindowManager;/** * 屏幕尺寸工具类 */public class ScreenSizeUtils {
private static ScreenSizeUtils instance = null; private int screenWidth, screenHeight; public static ScreenSizeUtils getInstance (Context mContext) { if (instance == null) { synchronized (ScreenSizeUtils.class) { if (instance == null) instance = new ScreenSizeUtils(mContext); } } return instance; } private ScreenSizeUtils (Context mContext) { WindowManager manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(dm); screenWidth = dm.widthPixels;// 获取屏幕分辨率宽度 screenHeight = dm.heightPixels;// 获取屏幕分辨率高度 } //获取屏幕宽度 public int getScreenWidth() { return screenWidth; } //获取屏幕高度 public int getScreenHeight() { return screenHeight; }}

另外一种解决方式:设置顶部跟底部的圆角

顶部圆角

>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <solid android:color="#ffffff" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> <!-- 矩形的边框的宽度,每段虚线的长度,和两段虚线之间的颜色和颜色 --> <!--<stroke--> <!--android:width="1dp"--> <!--android:color="#4eb621"--> <!--android:dashGap="4dp"--> <!--android:dashWidth="8dp" />-->` </shape>

底部圆角

>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp"/> <solid android:color="#ffffff"/> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> <!-- 矩形的边框的宽度,每段虚线的长度。和两段虚线之间的颜色和颜色 --> <!--<stroke--> <!--android:width="1dp"--> <!--android:color="#4eb621"--> <!--android:dashGap="4dp"--> <!--android:dashWidth="8dp" />--> </shape>

效果图例如以下

这里写图片描写叙述

你可能感兴趣的文章
Xqk.Data数据框架使用说明之:使用Xqk.Data的一般步骤
查看>>
HDU_3172_带权并查集
查看>>
centos7 源码安装nginx
查看>>
php 下载word 含图片
查看>>
栈的顺序存储实现
查看>>
编年史:OI算法总结
查看>>
IOS Exception 1(RangeText="[SKTexture]()")
查看>>
IOCP基础封装
查看>>
sass学习
查看>>
javascript基础篇:函数
查看>>
单调队列
查看>>
【原创】C#通用权限管理-程序安全检查,这些你一定要考虑到位
查看>>
Ubuntu完全教程,让你成为Ubuntu高手!
查看>>
vue父子通信的基本使用
查看>>
jquery.cookie 介绍 和 用法
查看>>
[CI] 使用Jenkins自动编译部署web应用
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
Centes7 使用 xshell 登陆
查看>>
TestNG源代码分析:依赖管理的实现
查看>>
VMWare 安装时报错 tools-windows.msi failed报错解决办法
查看>>