我目前有一个从工具栏右侧开始的圆形显示动画。我希望初始圈中心从“搜索”图标开始,这个图标让我很难找到答案。我尝试更改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();
}
答案 0 :(得分:1)
试试这个:
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>
确保视图&#34;查看&#34;设置为该布局的ID
final View view = findViewById(R.id.linearLayout);
基本上我所做的是添加一个LinearLayout并设置其宽度和高度以匹配match_parent,因此这个视图位于所有内容的顶部,此视图是显示在其上的位置,并确保视图不在&# 39;影响你的布局我将可见性设置为不可见,并在显示开始时将其设置为可见:
view.setVisibility(View.VISIBLE);
我希望它有所帮助。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
你可以试试这个:
enter i
nt cx = search_bar.getRight() * 5 / 6;
int cy = (search_bar.getTop() + search_bar.getBottom()) / 2;