Android: 指定循环显示动画起始位置?
Android: specify circular reveal animation starting position?
我目前有一个从工具栏最右侧开始的圆形显示动画。我希望初始圆心从 "search" 图标开始,这让我很难找到答案。我尝试更改 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();
}
试试这个:
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 更改为您的 "search" 图标视图,然后在显示完成后 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>
确保视图 "view" 设置为该布局的 ID
final View view = findViewById(R.id.linearLayout);
基本上我所做的是添加一个 LinearLayout 并将其宽度和高度设置为匹配 match_parent,因此此视图位于所有内容之上,并且此视图是显示位于其之上的位置,并且确保视图不会影响您的布局我将可见性设置为不可见,并在显示开始时将其设置为可见:
view.setVisibility(View.VISIBLE);
希望对您有所帮助。
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);
}
你可以试试这个:
enter i
nt cx = search_bar.getRight() * 5 / 6;
int cy = (search_bar.getTop() + search_bar.getBottom()) / 2;
我目前有一个从工具栏最右侧开始的圆形显示动画。我希望初始圆心从 "search" 图标开始,这让我很难找到答案。我尝试更改 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();
}
试试这个:
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 更改为您的 "search" 图标视图,然后在显示完成后 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>
确保视图 "view" 设置为该布局的 ID
final View view = findViewById(R.id.linearLayout);
基本上我所做的是添加一个 LinearLayout 并将其宽度和高度设置为匹配 match_parent,因此此视图位于所有内容之上,并且此视图是显示位于其之上的位置,并且确保视图不会影响您的布局我将可见性设置为不可见,并在显示开始时将其设置为可见:
view.setVisibility(View.VISIBLE);
希望对您有所帮助。
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);
}
你可以试试这个:
enter i
nt cx = search_bar.getRight() * 5 / 6;
int cy = (search_bar.getTop() + search_bar.getBottom()) / 2;