본질적으로 대화 상자 안에 두 개의보기가 있습니다. A button
및 LinearLayout
이 있습니다. 이 LinearLayout
을 CircularReveal
으로 단추의 중심에서 움직여서 전체 대화 상자가 색상으로 덮 이도록하려고합니다.대화 상자 내에서 시선을 얻을 수 없습니다.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
<com.dd.CircularProgressButton
android:id="@+id/sign_in_enter_button"
android:layout_gravity="bottom|center_horizontal"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_marginRight="24dp"
android:layout_marginLeft="24dp"
android:textColor="@android:color/white"
android:textSize="15dp"
app:cpb_cornerRadius="1dp"
app:cpb_textIdle="@string/login_sign_in"
app:cpb_iconComplete="@drawable/ic_done_mini"
app:cpb_selectorIdle="@color/morph_button_idle_colors"
app:cpb_selectorComplete="@color/morph_button_complete_colors"
app:cpb_colorIndicator="@color/colorAccent"
app:cpb_colorIndicatorBackground="@android:color/transparent"
app:cpb_colorProgress="@android:color/transparent"/>
...
</LinearLayout>
</ScrollView>
<!-- Background to be animated behind the CircularProgressButton -->
<LinearLayout
android:id="@+id/sign_in_dialog_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="invisible"
android:layout_gravity="center"
android:gravity="center"
android:background="@color/colorAccent">
...
</LinearLayout>
</FrameLayout>
이미 내 응용 프로그램의 다른 곳에서 사용했습니다 나는이 방법을 사용했습니다이 애니메이션을 수행하고 :
이
내가 대화로 사용하는 XML이다 완벽하게 작동합니다 :final CircularProgressButton enterButton = (CircularProgressButton) parent.findViewById(R.id.sign_in_enter_button);
...
// This is called inside a listener, so the button is already drawn.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
int enterButtonX = (enterButton.getLeft()
+ enterButton.getRight())/2;
int enterButtonY = ((int) enterButton.getY()
+ enterButton.getHeight())/2;
View background = mAlertDialogView.findViewById(R.id.sign_in_dialog_background);
int radiusReveal = Math.max(background.getWidth()
, background.getHeight());
background.setVisibility(View.VISIBLE);
Animator animator =
android.view.ViewAnimationUtils.createCircularReveal(background
, enterButtonX
, enterButtonY
, 0
, radiusReveal);
animator.setDuration(500);
animator.setInterpolator(
AnimationUtils.loadInterpolator(LoginUI.this, R.anim.accelerator_interpolator));
animator.start();
}
좌표가 버튼에 근접하지 않습니다. 사실, 애니메이션은 대화 상자의 중심에서부터 시작됩니다.
내가 잘못하고있는 것에 대한 아이디어가 있습니까?
감사합니다,
중력이 center_horizontal이고 가로로 여백을 고정했는데 왜 필요합니까? 또한 당신이 중력을 가지고 있기 때문에 높이에 관해서는 높이가 포장 내용이 아니라면 원하는대로 표시되지 않습니다 –
간단한 프로젝트를 어딘가에 게시 할 수 있습니까? – azizbekian
@TasdAqwe 당신은 무엇을 의미합니까? center_horizontal은 match_parent를 사용할 때 필요하지 않을 수도 있지만 여전히 원하는대로 표시됩니다. – cuoka