Android 사용자 정의 PopupWindow 멋 진 IOS 대화 상자 효과 구현

선언:
최근 IOS 시스템 을 사용 하 는 과정 에서 IOS 아래쪽 팝 업 상자 가 매우 아름 답 고 대기 적 이 며 등급 이 높 은 것 을 발견 하 자 안 드 로 이 드 에서 비슷 한 대화 상 자 를 실현 할 수 있 을 까 하 는 생각 이 들 었 다.이것 은 쓸데없는 말 이 아 닙 니까?극소수의 시스템 급 모방 할 수 없 는 것 외 에(저작권)바가지 에 따라 조롱박 을 그 릴 수 없 는 것 이 무엇 입 니까?그래서 이 글 은 안 드 로 이 드 에서 높 은 모방 IOS 대화 상자 효 과 를 실현 하 는 방법 을 소개 할 것 입 니 다.먼저 그림 을 그 려 서 여러분 에 게 눈 을 즐겁게 할 것 입 니 다.
这里写图片描述
여러분 은 위의 대화 상 자 를 보 았 을 때 간단 한 실현 방향 을 생각 하지 못 하 셨 나 요?내 가 여기 서 제시 한 아 이 디 어 는 우리 가 PopupWindow 를 사용자 정의 한 다음 에 우리 의 레이아웃 을 설정 할 수 있다 는 것 이다.이 레이아웃 은 매우 기교 가 있 습 니 다.바로 대화 상자 중간의 투명 한 차단 구역 은 margin 값 입 니 다.각 격 리 된 item layot 의 배경 은 흰색 원 각 사각형 이 고 그 다음 에 PopupWindow 의 배경 을 투명 하 게 하면 됩 니 다.간단 하지 않 습 니까?자,코드 를 만들어 서 집 으로 가 져 갑시다.
여러분 도 제 지난 글 을 보 실 수 있 습 니 다.
코드 구현
1.레이아웃 작성

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
 <LinearLayout
 android:layout_width="match_parent"
 android:orientation="horizontal"
 android:paddingTop="12dp"
 android:paddingBottom="12dp"
 android:background="@drawable/corner_white_bg"
 android:layout_height="wrap_content">
 <Button
  android:id="@id/btn_share_weixin"
  android:layout_width="0dp"
  android:layout_weight="1"
  android:drawableTop="@mipmap/ic_share_weixin"
  android:drawablePadding="6dp"
  android:background="@null"
  android:textColor="@android:color/black"
  android:textSize="@dimen/text_14_sp"
  android:text="@string/weixin"
  android:layout_height="wrap_content"/>
 <Button
  android:id="@id/btn_share_friends"
  android:layout_width="0dp"
  android:layout_weight="1"
  android:drawableTop="@mipmap/ic_share_friends"
  android:drawablePadding="6dp"
  android:background="@null"
  android:textColor="@android:color/black"
  android:textSize="@dimen/text_14_sp"
  android:text="@string/weixin_friends"
  android:layout_height="wrap_content"/>
 <Button
  android:id="@id/btn_share_qq"
  android:layout_width="0dp"
  android:layout_weight="1"
  android:drawableTop="@mipmap/ic_share_qq"
  android:drawablePadding="6dp"
  android:background="@null"
  android:textColor="@android:color/black"
  android:textSize="@dimen/text_14_sp"
  android:text="@string/qq"
  android:layout_height="wrap_content"/>
 <Button
  android:id="@id/btn_share_qq_zone"
  android:layout_width="0dp"
  android:layout_weight="1"
  android:drawableTop="@mipmap/ic_share_zones"
  android:drawablePadding="6dp"
  android:textColor="@android:color/black"
  android:textSize="@dimen/text_14_sp"
  android:background="@null"
  android:text="@string/qq_zones"
  android:layout_height="wrap_content"/>
 </LinearLayout>
 <Button
 android:id="@id/btn_cancel"
 android:layout_width="match_parent"
 android:textColor="@android:color/black"
 android:textSize="@dimen/text_14_sp"
 android:layout_marginTop="10dp"
 android:layout_marginBottom="10dp"
 android:text="@string/cancel"
 android:background="@drawable/corner_white_bg"
 android:layout_height="wrap_content"/>
</LinearLayout>
여기 서 차단 되 어 있 는 부분 은 두 개 이기 때문에 레이아웃 에 두 개의 view 배경 이 흰색 사각형 입 니 다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
 <corners android:radius="10dp"/>
 <solid android:color="@android:color/white"/>
</shape>
2.팝 업 창 계승

public class IosPopupWindow extends PopupWindow implements View.OnClickListener {
 private Context mContext;
 public IosPopupWindow(Activity activity) {
 super(activity);
 mContext = activity;
 LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View contentView = inflater.inflate(R.layout.dialog_share, null);
 setContentView(contentView);
 int screenWidth = activity.getWindowManager().getDefaultDisplay().getWidth();
 //  popupwindow      
 this.setWidth((int) (screenWidth - 2 * dp2px(mContext,12f)));
 this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
 //        
 setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 //     
 this.setAnimationStyle(R.style.IosDialog);
 //          
 this.setFocusable(true);
 //        
 this.setOutsideTouchable(true);
 initView(contentView);
 }
이 코드 의 가장 중요 한 것 은 우리 의 PopupWindow 에 투명 한 배경 Drawable 을 설정 하 는 것 입 니 다.
3.창 이 꺼 지면 외부 가 어 두 워 집 니 다.

/**
 *  popupwindow        
 */
private void popOutShadow() {
 final Window window = ((Activity) mContext).getWindow();
 WindowManager.LayoutParams lp = window.getAttributes();
 lp.alpha = 0.5f;//       
 window.setAttributes(lp);
 setOnDismissListener(new OnDismissListener() {
 @Override
 public void onDismiss() {
  WindowManager.LayoutParams lp = window.getAttributes();
  lp.alpha = 1f;
  window.setAttributes(lp);
 }
 });
}
Dialog 와 달리 PopupWindow 는 외부 가 어 두 워 지 려 면 붙 어 있 는 window 의 투명 도 를 바 꿔 야 하기 때문에 PopupWindow 에 전 달 된 Context 는 Activity 형식 이 어야 하 며 창 이 사라 질 때 Window 의 투명 도 를 초기 화해 야 합 니 다.
마지막 으로 Ios PopupWindow 의 github 를 드 립 니 다.가 질 만 한 가치 가 있 습 니 다Android 사용자 정의 Dialog,시 크 한 주류 로 딩 대화 상자
총결산
위 에서 소개 한 안 드 로 이 드 사용자 정의 팝 업 윈도 우 는 시 크 한 IOS 대화 상자 효 과 를 실현 합 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기