Arrow Dialog

UI view



about the radius dialog visit here.
here is my code.

public void handleCloseTable(View anchor) {
        PaymentCloseDialog dialog = new PaymentCloseDialog(mActivity);
        dialog.setAnchorView(anchor);
        dialog.show();
    }


the basic dialog 

layout.xml 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/_348dp"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="@dimen/_336dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:background="@drawable/bg_dialog_white_all_radius"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tvTitle"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_51dp"
            android:background="@drawable/bg_textview_radius_black"
            android:gravity="center"
            android:paddingLeft="@dimen/_5dp"
            android:text="Title"
            android:textColor="#FFF6F6"
            android:textSize="@dimen/_24sp" />

        <LinearLayout
            android:id="@+id/layContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tvContent"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/_4dp"
                android:gravity="center_vertical"
                android:maxLines="3"
                android:paddingLeft="@dimen/_5dp"
                android:paddingTop="@dimen/_6dp"
                android:text="Are you sure?"
                android:textSize="@dimen/_18sp"/>

            <EditText
                android:id="@+id/etName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="gone"/>
            

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/_51dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btnCancel"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:layout_below="@+id/tvTitle"
                android:layout_marginRight="@dimen/_2dp"
                style="@style/buttonGreyLeftRadius"
                android:text="NO" />

            <Button
                android:id="@+id/btnConfirm"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:layout_toLeftOf="@id/btnCancel"
                style="@style/buttonBlueRightRadius"
                android:text="YES" />
        </LinearLayout>

    </LinearLayout>

    <ImageView
        android:id="@+id/ivPoint"
        android:layout_width="@dimen/_13dp"
        android:layout_height="@dimen/_20dp"
        android:layout_marginTop="@dimen/_51dp"
        android:src="@drawable/dialogpoint" />

</RelativeLayout>

drawable files



Abs Dialog code

package com.jack.lib.dialog;

import android.content.Context;
import android.content.res.Resources;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

import com.jack.lib.R;


/**
 * 此類爲付款頁面所有帶有箭頭效果窗口的父類,其中子Dialog的佈局文件必須基於 R.layout.dialog_payment_abs
 * <p/>
 * http://www.cnblogs.com/angeldevil/archive/2012/03/31/2426242.html
 * https://developer.android.com/reference/android/view/View.html#Position
 */
public class PaymentAbsDialog extends MessageConfirmAbsDialog {
    protected Context context;
    public Resources resources;
    private ImageView ivPoint;
    private View mView;  //錨點

    public PaymentAbsDialog(Context context, int resId) {
        super(context, R.layout.dialog_payment_close);
        this.context = context;
        resources = context.getResources();
        ivPoint = $(R.id.ivPoint);
    }

    public void setAnchorView(View mView) {
        this.mView = mView;
    }

    /*
 * lp.x與lp.y表示相對於原始位置的偏移.
 * 當參數值包含Gravity.LEFT時,對話框出現在左邊,所以lp.x就表示相對左邊的偏移,負值忽略.
 * 當參數值包含Gravity.RIGHT時,對話框出現在右邊,所以lp.x就表示相對右邊的偏移,負值忽略.
 * 當參數值包含Gravity.TOP時,對話框出現在上邊,所以lp.y就表示相對上邊的偏移,負值忽略.
 * 當參數值包含Gravity.BOTTOM時,對話框出現在下邊,所以lp.y就表示相對下邊的偏移,負值忽略.
 */
    @Override
    public void show() {
        int[] scPosition = new int[2];
        mView.getLocationOnScreen(scPosition);
        Window dialogWindow = getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);
        lp.x = mView.getWidth() + 4;
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) ivPoint.getLayoutParams();
        ViewGroup.LayoutParams pa = ivPoint.getLayoutParams();
        double height = scPosition[1] + ((double) mView.getMeasuredHeight()) / 2 - (params.topMargin + pa.width / 2);
        lp.y = (int) height;                   // 新位置Y座標
        lp.dimAmount = 0.1f;                   //設置彈出後Activity背景透明度
        dialogWindow.setAttributes(lp);
        super.show();
    }
}


docs address 

i'm fish. i'm on.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章