2

現在、ツールバーの右端から始まる円形のリビール アニメーションがあります。答えを見つけるのに苦労した「検索」アイコンから最初の円の中心を開始したいと思います。cxとのxy値を変更しようとしましたが、失敗しました。どんな助けでも大歓迎です。

final Toolbar search_bar = (Toolbar) findViewById(R.id.search_toolbar);

                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    int cx = search_bar.getWidth();
                    int cy = search_bar.getHeight()/2;

                    float finalRadius = (float) Math.hypot(cx, cy);

                    Animator anim =
                            ViewAnimationUtils.createCircularReveal(search_bar, cx, cy, 0, finalRadius);

                    search_bar.setVisibility(View.VISIBLE);
                    anim.start();
                }

ここに画像の説明を入力

4

3 に答える 3

3

これを試して :

public void startCircularReveal() {
    final View view = findViewById(R.id.linearLayout);
    final View startView = findViewById(R.id.button_container);
    int cx = (startView.getLeft() + startView.getRight()) / 2;
    int cy = (startView.getTop() + startView.getBottom()) / 2;
    view.setBackgroundColor(Color.parseColor("#6FA6FF"));
    int finalRadius = Math.max(cy , view.getHeight() - cy);
    Animator anim = ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius);
    anim.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {

        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
    anim.setDuration(200);
    view.setVisibility(View.VISIBLE);
    anim.start();
}

ビューをその上に表示するビュー (通常はルート ビュー) に変更し、 startView を「検索」アイコン ビューに変更し、 onAnimationEnd は表示が終了した後に必要なことを行います。

アップデート

リビールがビューの上にない場合、このビューをレイアウトの一番下に追加することで修正するちょっとしたコツがあります

            <LinearLayout
                android:id="@+id/linearLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/custom_theme_color"
                android:orientation="vertical"
                android:visibility="invisible">
            </LinearLayout>

ビュー「ビュー」がそのレイアウトのIDに設定されていることを確認してください

final View view = findViewById(R.id.linearLayout);

基本的に私がしたことは、LinearLayout を追加し、その幅と高さを match_parent と一致するように設定することです。そのため、このビューはすべての上にあり、このビューは明らかに上にある場所であり、そのビューがあなたのレイアウト 可視性を非表示に設定し、公開の開始時に可視性を設定します。

view.setVisibility(View.VISIBLE);

お役に立てば幸いです。

于 2017-01-28T12:22:53.133 に答える