ios可以在window基础上做,刚学安卓,想知道安卓是否有?求大神指点怎么实现这样的效果?
我自定义一个view,继承Dialog,没有这样的遮罩效果,源代码:
为什么上面会有Dialog的标题栏?
就是一个dialog
supportlibrary 23.2.0 ,提供了BottomSheetDialogFragment ,轻松达到想得到的效果
Dialog即可实现你想要的效果,设置Dialog的window属性,可以改变dialog在屏幕的显示位置。如,你截图的效果可以这么写
Dialog mDialog = new Dialog(this);
Window mWindow = mDialog.getWindow();
mWindow.setLayout(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
mWindow.setGravity(Gravity.BOTTOM);
当然,dialog里的布局内容就需要你再去放置了。
PhotoChioceDialog
public class PhotoChioceDialog {
private Context context;
private Dialog dialog;
private ClickListenerInterface clickListenerInterface;
public PhotoChioceDialog(Context context){
this.context =context;
dialog = new Dialog(context, R.style.photo_chioce_dialog);
dialog.setContentView(R.layout.dialog_pic_chioce);
dialog.findViewById(R.id.btn_album).setOnClickListener(new ClickListener());
dialog.findViewById(R.id.btn_camera).setOnClickListener(new ClickListener());
dialog.findViewById(R.id.btn_cancel).setOnClickListener(new ClickListener());
Window window = dialog.getWindow();
window.setWindowAnimations(R.style.main_menu_animstyle);
WindowManager.LayoutParams lp = window.getAttributes();
WindowManager manager=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
lp.x = 0;
lp.y = manager.getDefaultDisplay().getHeight();
// 以下这两句是为了保证按钮可以水平满屏
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
// 设置显示位置
dialog.onWindowAttributesChanged(lp);
// 设置点击外围解散
dialog.setCanceledOnTouchOutside(true);
}
public void show(){
dialog.show();
}
public void dismiss(){
dialog.dismiss();
}
public void setClickListenerInterface(ClickListenerInterface clickListenerInterface) {
this.clickListenerInterface = clickListenerInterface;
}
public interface ClickListenerInterface {
/**
* 进入相册
*/
void doAlbum();
/**
* 取消
*/
void doCancel();
/**
* 进入相机
*/
void doCamera();
}
private class ClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_album:
if (clickListenerInterface!=null)
clickListenerInterface.doAlbum();
break;
case R.id.btn_camera:
if (clickListenerInterface!=null)
clickListenerInterface.doCamera();
break;
case R.id.btn_cancel:
if (clickListenerInterface!=null)
clickListenerInterface.doCancel();
break;
}
}
}
}
R.style.photo_chioce_dialog
<style name="photo_chioce_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
dialog_pic_chioce
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:gravity="bottom"
android:orientation="vertical"
android:layout_margin="10dp"
>
<Button
android:id="@+id/btn_album"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/photo_album_selector"
android:text="@string/album"
android:textColor="@color/black"
android:textSize="18sp"
android:padding="10dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/line"/>
<Button
android:id="@+id/btn_camera"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/photo_camera_selector"
android:text="@string/camera"
android:textColor="@color/black"
android:textSize="18sp"/>
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/photo_cancel_selector"
android:paddingBottom="16dp"
android:layout_marginTop="10dp"
android:text="@string/cancel"
android:textColor="@color/black"
android:textSize="18sp"/>
</LinearLayout>
动画style
<!--选择图片弹窗动画 -->
<style name="main_menu_animstyle">
<item name="android:windowEnterAnimation">@anim/photo_dialog_in_anim</item>
<item name="android:windowExitAnimation">@anim/photo_dialog_out_anim</item>
</style>
动画
photo_dialog_in_anim
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromXDelta="0"
android:fromYDelta="1000"
android:toXDelta="0"
android:toYDelta="0" />
</set>
photo_dialog_out_anim
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="1000" />
</set>