枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述Android 关于BottomDialogSheet 与Layout擦出爱的火花?相关的知识,希望能为你提供帮助。
今天上班做那个类似于ios拍照的那种效果图 就是个垂直布局然后里面textview+ 分割线+ textview+ button1、首先看下何为bottomsheetdialog, 以前Bottom Sheet是在support library 23.2之后提供的一个新控件, 也就是需要用6.0以上的SDK进行编译才可以使用此控件
当然也可以用button+ 分割线+ button
方法有很多, 选择适合自己的就行。
下面看下我当前的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>
效果如下
【Android 关于BottomDialogSheet 与Layout擦出爱的火花()】
文章图片
这不是我想要的, 然后看下UI给我的原型图
文章图片
我去这不是想要的, 为什么会出现这样的情况, 是不是设置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);
}
图片上传至服务器
private void uploadPic(Bitmap bitmap) {
// 上传至服务器
// 可以在这里把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 Intent Scheme URLs攻击
- Android 基础-给有java基础的初学者(四大组件)
- ArcGIS Android SDK 中文标注乱码
- 妙用HTML5的八大特性来开发移动webAPP
- 浅谈android怎样同一时候适配pad和手机
- Android string.xml 显示特殊符号
- 支付宝---手机APP支付
- Android学习笔记进阶19 之给图片加边框
- Android学习笔记进阶20 之得到图片的缩略图