android 环形动画,Android圆形扩展动画

今天学习了一个实现圆形扩展Activity切换动画效果

562cfa39b3a2

工具类代码

public class CircularAnimUtil {

public static final long PERFECT_MILLS = 618;

public static final int MINI_RADIUS = 0;

/**

* 向四周伸张,直到完成显示。

*/

@SuppressLint("NewApi")

public static void show(View myView, float startRadius, long durationMills) {

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {

myView.setVisibility(View.VISIBLE);

return;

}

int cx = (myView.getLeft() + myView.getRight()) / 2;

int cy = (myView.getTop() + myView.getBottom()) / 2;

int w = myView.getWidth();

int h = myView.getHeight();

// 勾股定理 & 进一法

int finalRadius = (int) Math.sqrt(w * w + h * h) + 1;

Animator anim =

ViewAnimationUtils.createCircularReveal(myView, cx, cy, startRadius, finalRadius);

myView.setVisibility(View.VISIBLE);

anim.setDuration(durationMills);

anim.start();

}

/**

* 由满向中间收缩,直到隐藏。

*/

@SuppressLint("NewApi")

public static void hide(final View myView, float endRadius, long durationMills) {

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {

myView.setVisibility(View.INVISIBLE);

return;

}

int cx = (myView.getLeft() + myView.getRight()) / 2;

int cy = (myView.getTop() + myView.getBottom()) / 2;

int w = myView.getWidth();

int h = myView.getHeight();

// 勾股定理 & 进一法

int initialRadius = (int) Math.sqrt(w * w + h * h) + 1;

Animator anim =

ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, endRadius);

anim.setDuration(durationMills);

anim.addListener(new AnimatorListenerAdapter() {

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

myView.setVisibility(View.INVISIBLE);

}

});

anim.start();

}

/**

* 从指定View开始向四周伸张(伸张颜色或图片为colorOrImageRes), 然后进入另一个Activity,

* 返回至 @thisActivity 后显示收缩动画。

*/

@SuppressLint("NewApi")

public static void startActivityForResult(

final Activity thisActivity, final Intent intent, final Integer requestCode, final Bundle bundle,

final View triggerView, int colorOrImageRes, final long durationMills) {

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {

thisActivity.startActivity(intent);

return;

}

int[] location = new int[2];

triggerView.getLocationInWindow(location);

final int cx = location[0] + triggerView.getWidth() / 2;

final int cy = location[1] + triggerView.getHeight() / 2;

final ImageView view = new ImageView(thisActivity);

view.setScaleType(ImageView.ScaleType.CENTER_CROP);

view.setImageResource(colorOrImageRes);

final ViewGroup decorView = (ViewGroup) thisActivity.getWindow().getDecorView();

int w = decorView.getWidth();

int h = decorView.getHeight();

decorView.addView(view, w, h);

final int finalRadius = (int) Math.sqrt(w * w + h * h) + 1;

Animator

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

anim.setDuration(durationMills);

anim.addListener(new AnimatorListenerAdapter() {

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

if (requestCode == null) {

thisActivity.startActivity(intent);

} else if (bundle == null) {

thisActivity.startActivityForResult(intent, requestCode);

} else {

thisActivity.startActivityForResult(intent, requestCode, bundle);

}

// 默认渐隐过渡动画.

thisActivity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

// 默认显示返回至当前Activity的动画.

triggerView.postDelayed(new Runnable() {

@Override

public void run() {

Animator anim =

ViewAnimationUtils.createCircularReveal(view, cx, cy, finalRadius, 0);

anim.setDuration(durationMills);

anim.addListener(new AnimatorListenerAdapter() {

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

try {

decorView.removeView(view);

} catch (Exception e) {

e.printStackTrace();

}

}

});

anim.start();

}

}, 1000);

}

});

anim.start();

}

/*下面的方法全是重载,用简化上面方法的构建*/

public static void startActivityForResult(

Activity thisActivity, Intent intent, Integer requestCode, View triggerView, int colorOrImageRes) {

startActivityForResult(thisActivity, intent, requestCode, null, triggerView, colorOrImageRes, PERFECT_MILLS);

}

public static void startActivity(

Activity thisActivity, Intent intent, View triggerView, int colorOrImageRes, long durationMills) {

startActivityForResult(thisActivity, intent, null, null, triggerView, colorOrImageRes, durationMills);

}

public static void startActivity(

Activity thisActivity, Intent intent, View triggerView, int colorOrImageRes) {

startActivity(thisActivity, intent, triggerView, colorOrImageRes, PERFECT_MILLS);

}

public static void startActivity(Activity thisActivity, Class> targetClass, View triggerView, int colorOrImageRes) {

startActivity(thisActivity, new Intent(thisActivity, targetClass), triggerView, colorOrImageRes, PERFECT_MILLS);

}

public static void show(View myView) {

show(myView, MINI_RADIUS, PERFECT_MILLS);

}

public static void hide(View myView) {

hide(myView, MINI_RADIUS, PERFECT_MILLS);

}

}

使用方法

Activity切换

//启动Activity,(MainActivity)

floatingActionButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Intent intent = new Intent(MainActivity.this, TestOne.class);

CircularAnimUtil.startActivity(MainActivity.this, intent, floatingActionButton, R.color.colorAnim);

}

});

//销毁Activity(TestOne)

@Override

public void onBackPressed() {

finish();

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

}

View显示隐藏

public class ViewAnimTest extends AppCompatActivity {

FloatingActionButton floatingActionButton;

ImageView imageView;

private boolean isShow=true;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.viewanimtest);

floatingActionButton=findViewById(R.id.fab);

imageView=findViewById(R.id.image);

floatingActionButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if(isShow){

CircularAnimUtil.hide(imageView);

}else {

CircularAnimUtil.show(imageView);

}

isShow=!isShow;

}

});

}

}

562cfa39b3a2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabVIEW 是一款用于编程和控制系统的软件,它具有直观的图形化编程界面,方便用户进行编程和控制系统的设计和实现。在 LabVIEW 中,可以通过编程实现各种动画效果,包括环形动画。 要实现环形动画,首先需要用 LabVIEW 中的图形控件来创建一个环形的图案,可以通过套索工具来绘制一个圆形,并对其进行一定的样式设计,比如填充颜色、边框样式等。然后通过 LabVIEW 的数据驱动编程功能,可以将环形图案进行动态控制,实现动画效果。 在 LabVIEW 中,可以利用定时器或者计时器控件来控制环形图案的运动和变化,比如可以设置定时器定期改变图案的位置、大小或者颜色,从而形成动态的环形动画效果。除此之外,还可以通过添加事件处理函数,实现用户交互控制,比如点击按钮或者拖拽滑块来控制环形图案的运动和变化。 通过以上方式,可以在 LabVIEW 中实现各种自定义的环形动画效果,增强用户界面的交互性和吸引力。同时,利用LabVIEW丰富的数据管理和分析功能,还可以实现更加复杂的环形动画效果,比如根据数据变化动态调整环形图案的形态,或者将环形动画与其他控制系统进行耦合,实现更加复杂的实时动态效果。 总之,LabVIEW 提供了丰富的工具和功能,可以方便地实现各种环形动画效果,用户可以根据实际需求和创意进行自定义设计和编程实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值