2

我目前有一个从工具栏的最右侧开始的圆形显示动画。我希望最初的圆心从“搜索”图标开始,这让我很难找到答案。我尝试更改cxandxy值但没有成功。任何帮助表示赞赏。

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 回答
0
revealView(listview, RssFragment.this.ll);

public  void revealView(View toBeRevealed, View frame)
{
    if (!ViewCompat.isAttachedToWindow(toBeRevealed))
    {
        return;
    }
    if (VERSION.SDK_INT >= 21)
    {
        Animator anim = ViewAnimationUtils.createCircularReveal(toBeRevealed, (frame.getLeft() + frame.getRight()) / 2, (frame.getTop() + frame.getBottom()) / 2, 0.0f, (float) Math.max(frame.getWidth(), frame.getHeight()));
        toBeRevealed.setVisibility(View.VISIBLE);
        anim.start();
        return;
    }
    toBeRevealed.setVisibility(View.VISIBLE);
}
于 2017-09-09T08:50:20.427 回答
0

你可以试试这个:

enter i
nt cx = search_bar.getRight() * 5 / 6;
int cy = (search_bar.getTop() + search_bar.getBottom()) / 2;
于 2021-08-08T04:27:27.727 回答