为了账号安全,请及时绑定邮箱和手机立即绑定

悬浮窗能实现自定Animation动画效果吗?

/ 猿问

悬浮窗能实现自定Animation动画效果吗?

SMILET 2019-04-04 11:07:04

悬浮窗能实现自定Animation动画效果吗


查看完整描述

4 回答

?
慕姐4208626
  • 目前找到的方法只能调用内建的动画效果

  • params = new WindowManager.LayoutParams();

  • params.windowAnimations = android.R.style.Animation_Translucent;

  • 若改成R.style.custon_anim的话则是怎麼样都没有动画


  • 可用的方法是直接搭Handler、Runnable来updateViewLayout

  • 但是在改物件大小时会看起来不顺畅

  • 仅管已经把呼叫时间改为1ms,一样没辨法每毫秒呼叫一次更新


  • 现在是先用Runnable的方法,只做了淡出效果、物件直接放大到固定值

  • 代码大致上如下


  • private void createFloatView(){

  • Log.d("HuybnTag","S.createFloatView");

  • btn_exif = new Button(getApplicationContext());

  • btn_exif.setBackgroundResource(R.drawable.exif);

  • wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);


  • exif = new WindowManager.LayoutParams();

  • exif.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

  • exif.format = PixelFormat.RGBA_8888;

  • exif.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

  • | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;

  • exif.height = 124;

  • exif.width = 124;

  • exif.gravity = Gravity.CENTER;

  • exif.windowAnimations = android.R.style.Animation_Translucent;

  • .......


  • 要离开时运行这个

  • fadeOut(btn_exif,exif);

  • //下面这段改自网络上的代码

  • public void fadeOut(final View notificationView, final LayoutParams params){

  • animTime=300;

  • exif.width=310;

  • exif.height=310;

  • final long startTime = System.currentTimeMillis();

  • Handler handler = new Handler();

  • handler.postDelayed(new Runnable(){

  • public void run(){

  • fadeOutHandler(notificationView, params, startTime);

  • }

  • }, 25);

  • }

  • public void fadeOutHandler(final View notificationView, final LayoutParams params, final long startTime){

  • long timeNow = System.currentTimeMillis();

  • float alpha = (1- ((float)(timeNow - startTime)/animTime) ) * 1.0f;

  • if(alpha<=0) alpha = 0;

  • params.alpha = alpha;

  • Log.d("HuybnTag","alpha= "+alpha);

  • wm.updateViewLayout(notificationView, params);

  • if (timeNow-startTime<animTime){

  • Handler handler = new Handler();

  • handler.postDelayed(new Runnable(){

  • public void run(){

  • fadeOutHandler(notificationView, params, startTime);

  • }

  • }, 25);

  • }



查看完整回答
反对 回复 2019-04-09
?
呼唤远方

正是丰富的运算符和表达式使C语言功能十分完善。这也是C语言的主要特点之一。C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。

查看完整回答
反对 回复 2019-04-09
?
一只萌萌小番薯

css3样式中的transform、animation都可以实现动画的相关效果。例如:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>animation动画效果</title>
<style>
div
{
width:100px;
height:100px;
background:red;
animation:myfirst 5s;
-webkit-animation:myfirst 5s; /* Safari and Chrome */
}

@keyframes myfirst
{
from {background:red;}
to {background:yellow;}
}

@-webkit-keyframes myfirst /* Safari and Chrome */
{
from {background:red;}
to {background:yellow;}
}
</style>
</head>
<body>

<p><b>注意:</b> 该实例在 Internet Explorer 9 及更早 IE 版本是无效的。</p>

<div></div>

</body>
</html>



查看完整回答
反对 回复 2019-04-09
?
繁星点点滴滴

在安卓应用的动画开发中,可能SDK中自带的补间动画不能满足应用的需求,需要在Java代码中自定义一些动画类,当然都是继承自Animation类。实现之后,我们一般直接在代码中使用,类似下面这样:

   CustomAnimation customAnimation = new CustomAnimation();customAnimation.setDuration(3000);customAnimation.setFillAfter(true);effectView.startAnimation(customAnimation);   

  当View同时要应用像Scale,Alpha这样的补间动画时,你就需要多添加类似下面的代码:

   CustomAnimation customAnimation = new CustomAnimation();customAnimation.setDuration(3000);customAnimation.setFillAfter(true);Animation scaleAnimation = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);Animation alphaAnimation = new AlphaAnimation(0.1f,1.0f);scaleAnimation.setDuration(10000);alphaAnimation.setDuration(10000);AnimationSet set = new AnimationSet(true);set.addAnimation(customAnimation);set.addAnimation(scaleAnimation);set.addAnimation(alphaAnimation);set.setFillAfter(true);set.setFillEnabled(true);effectView.startAnimation(set);    

  如果直接在xml中把所需的所有补间动画,包括自定义动画类放到一个集合,事情看起来就没那么复杂。在xml定义好动画集有两个好处:

  使用动画时需要更少的Java代码,整体上看上去更干净

  在xml中定义,各个动画属性一目了然也更集中,方便阅读与维护

  既然有这样的好处,我们就开始干吧。首先在xml中像下面这样定义一个动画集:

  R.anim.my_anim_set

   <?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:myapp="http://schemas.android.com/apk/res-auto"     android:interpolator="@android:anim/linear_interpolator"     android:shareInterpolator="true">    <alpha        android:fromAlpha="0"        android:toAlpha="1"        android:duration="400"/>    <myapp:cn.your.packagename.xx.CustomAnimation        myapp:customProp1="x"    <!-- 动画类自定义属性1 -->        myapp:customProp2="30"   <!-- 动画类自定义属性2 -->        myapp:customProp3="50%"  <!-- 动画类自定义属性3 -->        android:duration="400"        android:fillAfter="true"/></set>    

  然后,我们按照常理来,在Java代码中这样来加载我们定义的xml动画集:

   AnimationSet set = (AnimationSet)AnimationUtils.loadAnimation(this, R.anim.my_anim_set);effectView.startAnimation(set);    

  但是,抱歉!上面的代码是不正确执行,运行起来程序会直接终止。那什么原因呢?查看AnimationUtils.loadAnimation源代码我们知道,在其从xml载入动画类的时候,只认alpha、scale、rotate、translate这几个SDK自带的动画类,而我们写入的自定义动画类CustomAnimation会导致其报Unknown animation name的异常。官方SDK也没有提供解决这个问题的其他API方法,那么怎么解决呢? 很简单,只需在原有的AnimationUtils.loadAnimation源码上改动一行,从ClassLoader载入自定义动画类即可。将其源码拷贝过来,实现一个自己的loadAnimation方法,如下:

这样,使用OptAnimationLoader.loadAnimation方法就可以从xml中载入包含自定义动画的动画集了。



查看完整回答
反对 回复 2019-04-09

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信