Android 关于BottomDialogSheet 与Layout擦出爱的火花?
今天上班做那个相似于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>
效果例如以下
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTU5NTAzMjU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
这不是我想要的。然后看下UI给我的原型图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTU5NTAzMjU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
我去这不是想要的,为什么会出现这种情况,是不是设置margin的原因,好吧。那我找一下,好像不是啊!然后看到自己在这里设置了背景为半透明把这个去掉试试
好像并没什么卵用。这究竟是什么鬼,今天上班眼镜也没有戴,感觉真的像个瞎子一样!
晕!
那么继续找,问题出现了肯定要解决,最后找到了原来我在最外面那个线性布局设置了一个pading=8dp好吧我真是对自己感到失望,这技术能够退出android界了,玩不下去了!
然后把它设置为0dp试试!然后有个网友说设置0dp跟没设置一样,看看究竟是不是一样?我们一试便知晓。
这里不设置pading=0dp试试!
效果图
大家应该看到了肯定不行的
再看下我的背景round_corner.xml 代码例如以下
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="10dp" />
<solid android:color="#ffffff" />
<padding android:bottom="10dp"
android:left="10dp" android:right="10dp" android:top="10dp"/>
</shape>
当设置为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、由于自己实在是菜
转载请注明出处!
http://blog.csdn.net/qq_15950325/article/details/70213684
补充:
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;
}
}
另外一种解决方式:设置顶部跟底部的圆角
<?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="@android:color/transparent"
android:orientation="vertical">
<Button
android:id="@+id/take_photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/half_round_corner"
android:text="拍照" />
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ddd" />
<Button
android:id="@+id/picture_choose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/round_corner2"
android:text="相冊" />
<Button
android:id="@+id/btn_cancel3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/round_corner"
android:text="取消" />
<View
android:layout_width="match_parent"
android:layout_height="15dp" />
</LinearLayout>
顶部圆角
<?xml version="1.0" encoding="utf-8"?
>
<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>
底部圆角
<?xml version="1.0" encoding="utf-8"?
>
<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>
效果图例如以下
Android 关于BottomDialogSheet 与Layout擦出爱的火花?的更多相关文章
- [置顶]
Android 关于BottomDialogSheet 与Layout擦出爱的火花?
今天上班做那个类似于ios拍照的那种效果图 就是个垂直布局然后里面textview+分割线+textview+button 当然也可以用button+分割线+button 方法有很多,选择适合自己的就 ...
- 小程序与WebRTC联姻能擦出怎样的火花?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯视频云终端团队发表于云+社区专栏 腾讯视频云终端技术总监,rexchang(常青), 2008 年毕业加入腾讯,一直从事客户端研发 ...
- 当Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleuth会擦出怎样的火花
前言 今年主要会做一个比较完整的微服务项目开源出来.目前已经开始了,刚兴趣的先Star一个吧. 项目:https://github.com/yinjihuan/kitty-cloud 基础框架:htt ...
- 当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花
开心一刻 晚上,女儿眼噙泪水躺在床上 女儿:你口口声声说爱我,说陪我,却天天想着骗我零花钱,你是我亲爹吗? 我:你想知道真相 女儿:想! 我:那你先给爸爸两百块钱! 环境准备 MySQL 不同版本 利 ...
- Android帧布局(Frame Layout)
Android帧布局(Frame Layout) FrameLayout是最简单的一个布局管理器.FrameLayout为每个加入其中的组件创建一个空白区域(一帧),这些组件根据layout_grav ...
- Android 高仿QQ滑动弹出菜单标记已读、未读消息
在上一篇博客<Android 高仿微信(QQ)滑动弹出编辑.删除菜单效果,增加下拉刷新功能>里,已经带着大家学习如何使用SwipeMenuListView这一开源库实现滑动列表弹出菜单,接 ...
- Android View框架的layout机制
概述 Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure) Android View框架的measure机制 2.View树的布局(layout)Andr ...
- [转]【android studio】解决layout预览出现Rendering Problems Exception Unable to find the layout for Action Bar.
在android studio中打开layout文件,发现不能预览布局,提示以下错误: Rendering Problems Exception raised during rendering: Un ...
- Android线性布局(Linear Layout)
Android线性布局(Linear Layout) LinearLayout是一个view组(view group),其包含的所有子view都以一个方向排列,垂直或是水平方向.我们能够用androi ...
随机推荐
- 初识LiveScript
The LiveScript Book 邂逅 LiveScript 就像很多现代化的语言一样,LiveScript 使用缩进来表示语句块,使用换行取代分号来表示一个语句的结束 (如果你想要一行 ...
- NYOJ 311 完全背包
完全背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是 ...
- ecmascript6入门
ECMAScript 6 入门 阮一峰
- 最短路POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- 九度oj 题目1022:游船出租
题目描述: 现有公园游船租赁处请你编写一个租船管理系统.当游客租船时,管理员输入船号并按下S键,系统开始计时:当游客还船时,管理员输入船号并按下E键,系统结束计时.船号为不超过100的正整数. ...
- 【Luogu】P1516青蛙的约会(线性同余方程,扩展欧几里得)
题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍. ——信息学奥赛之数学一本通 避免侵权.哈哈. 两只青蛙跳 ...
- 算法复习——无源汇可行流(zoj2314)
题目: The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nucl ...
- spring之注入类型
spring有三种注入类型: set注入: 构造注入: 接口注入: 一.set注入(引用spring官方文档中的例子)(用的最多) 1.首先在代码中我们需要编写成员变量的set方法,如下所示,一般情况 ...
- golang-random随机数
在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景. 一."math/ra ...
- linux下将目录授权给其他用户的步骤
1.更改目录所有者命令:chown -R 用户名称 目录名称2.更改目录权限命令:chmod -R 755 目录名称