gpt4 book ai didi

java - Android:指定圆形显示动画的起始位置?

转载 作者:行者123 更新时间:2023-11-30 00:45:14 25 4
gpt4 key购买 nike

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

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();
}

enter image description here

最佳答案

试试这个:

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();
}

将 View 更改为您想要在其顶部显示的 View (通常是 Root View ),并将 startView 更改为您的“搜索”图标 View ,然后在显示完成后 onAnimationEnd 执行您想要的任何操作。

更新

如果 reveal 不在你的 View 之上,有一个小技巧可以通过将这个 View 添加到你的布局底部来修复它

            <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>

确保 View “view”设置为该布局的 id

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

基本上我所做的是添加一个 LinearLayout 并设置它的宽度和高度以匹配 match_parent,所以这个 View 在所有东西之上,这个 View 是显示在上面的地方,并确保 View 不会'为了不影响您的布局,我将可见性设置为不可见,并在显示开始时将其设置为可见:

view.setVisibility(View.VISIBLE);

希望对你有帮助。

关于java - Android:指定圆形显示动画的起始位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com