android画图动画
A. Android开发,怎样做一个画圆圈的动画效果
画圆应该很简单,自动循环的话,你就每隔一段时间刷新一下view
B. android 怎么添加帧动画效果
Android的SDK提供了三种类型的动画,分别是补间动画、逐帧动画和插值属性动画。下面先介绍第一种动画效果-补间动画。 补间动画可以应用于View,让开发者可以定义一些关于大小、位置、旋转和透明度的改变效果,达到让View的内容动起来的效果。 补间动画是使用Animation类创建的,它有4个直接子类,分别实现不同的动画效果,分别为: AlphaAnimation 渐变透明度动画效果,即淡入淡出效果 ScaleAnimation 渐变尺寸伸缩动画效果,即缩放效果 TranslateAnimation 画面转换位置移动动画效果,移动效果 RotateAnimation 画面转移旋转动画效果,即旋转效果 要使用补间动画的效果,有两种方法,第一种是在XML文件中设置动画效果;第二种是在java代码中设置。下面分别介绍这两种方法: 1.在XML文件中设置方式: 在Android项目的res目录下新建anim文件夹,然后在anim文件夹下新建firstanim.xml,添加动画效果的配置代码,示例代码如下: [html] android:fromAlpha="0.1" android:toAlpha="1.0" android:ration="3000" /> android:interpolator= "@android:anim/accelerate_decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.4" android:fromYScale="0.0" android:toYScale="1.4" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:ration="700" /> android:fromXDelta="30" android:toXDelta="-80" android:fromYDelta="30" android:toYDelta="300" android:ration="2000" /> android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromDegrees="0" android:toDegrees="+350" android:pivotX="50%" android:pivotY="50%" android:ration="3000" /> android:fromAlpha="0.1" android:toAlpha="1.0" android:ration="3000" /> android:interpolator= "@android:anim/accelerate_decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.4" android:fromYScale="0.0" android:toYScale="1.4" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:ration="700" /> android:fromXDelta="30" android:toXDelta="-80" android:fromYDelta="30" android:toYDelta="300" android:ration="2000" /> android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromDegrees="0" android:toDegrees="+350" android:pivotX="50%" android:pivotY="50%" android:ration="3000" /> 在Activity中的onCreate()方法中,获取在XML中配置的动画效果,代码如下: [java] Animation animation= AnimationUtils.loadAnimation(this,R.anim.firstanim); Animation animation= AnimationUtils.loadAnimation(this,R.anim.firstanim); 如果这个动画效果使用在一个ImageView上,可以参考如下代码: [java] imageView.startAnimation(animation); imageView.startAnimation(animation);2.在Java代码中设置方式: 以AlphaAnimation为例, [java] //首先声明Animation的一个对象 private Animation alpha; //在Activity的onCreate()方法中实例化这个对象 alpha=new AlphaAnimation(0.1f, 1.0f); //设置动画持续时间为3秒 alpha.setDuration(3000); //首先声明Animation的一个对象 private Animation alpha; //在Activity的onCreate()方法中实例化这个对象 alpha=new AlphaAnimation(0.1f, 1.0f); //设置动画持续时间为3秒 alpha.setDuration(3000); 如果这个动画效果使用在一个ImageView上,可以参考如下代码: [java] imageView.startAnimation(alpha); imageView.startAnimation(alpha);
C. android应用的动画ui怎么实现的
Android的动画归纳起来有帧动画,和属性动画。一般情况下,帧动画实现起来会相对简单很多,只要美工提供一帧一帧的图片就可以很容易的实现,代码不用很复杂。但是相对而言,弊端有很多,比如内存占用大,动画不流畅,所以很多时候,我们还是推荐属性动画。
在Android4.0之前我们可以使用Animation实现简单的动画,但是一些复杂的动画,我们想要组合起来就会复杂很多,代码量也会大很多。所以Android4.0以后推出了ObjectAnim相关的API,会让动画更加简单。另外有些特别复杂的动画,我们可以自定义View在onDraw中实现相关的绘图,让画面重复绘制,产生动画效果,但这其实也应该属于属性动画的范畴,但确实Android中高级动画的实现方式。
D. 如何在Android中实现折纸动画
android中实现折纸动画,要求系统是4.0以上,过程如下:
布局的实现
设计的第一个元素是可以对折的布局。我们的做法相当大胆:主布局(FoldableItemLayout)只包含一个特定的布局(在baselayout)。在动画中,BaseLayout将它的内容写入到缓存中,这是一个根据原始布局的尺寸专门创建的Bitmap对象。
{
@Override
protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
BitmapcacheBitmap=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
mBaseLayout.setCacheCanvas(newCanvas(cacheBitmap));
}
}
{
privateCanvasmCacheCanvas;
privatevoidsetCacheCanvas(CanvascacheCanvas){
mCacheCanvas=cacheCanvas;
}
@Override
publicvoiddraw(Canvascanvas){
mCacheCanvas.drawColor(0,PorterDuff.Mode.CLEAR);
super.draw(mCacheCanvas);
}
}
此外,还需要两个额外的视图(PartView)——用于图像的上、下两半部分。它们将在缓存中显示对应的数据,这些数据代表了该图像(Bitmap)的上半部和下半部。两个视图填充了主布局的整个区域,但只显示所需的部分。为了达到这种效果,我们计算了位图的界限——在onDraw()方法中,我们让画布通过[drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)](http://developer.android.com/reference/android/graphics/Canvas.html#drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint))方法来绘制所需的部分。
然后通过setRotationX()方法设置相应的角度,设法旋转这些额外的视图,从而实现图像上半部和下半部的独立旋转。为了实现这个功能,我们为FoldableItemLayout添加了一个名为FoldRotation的新参数。
FoldRotation参数范围是(-180,180]:
FoldRotation=0:两个部分都不旋转。在这种情况下,我们可以跳过位图缓存,实时的显示原始的布局。
0 <FoldRotation<90:下层的部分旋转到FoldRotation角度;上层部分不旋转。
-90<FoldRotation<0:只有上层部分旋转。
90≤FoldRotation<180:下层部分不再显示。在这种情况下,包含下一布局的FoldableItemLayout应该覆盖当前的FoldableItemLayout。
-180<FoldRotation≤-90:上层部分不再显示。在这种情况下,包含先前的布局FoldableItemLayout应该覆盖当前的FoldableItemLayout。
FoldRotation=180:两个部分都隐藏。
现在有了一个二层布局,能够“折叠”它包含的元素,这样就可以做出一个FoldableListLayout——一个类似列表视图的布局,它创建列表元素,并通过使用BaseAdapter将其封装成FoldableItemLayout。在这种情况下,我们还使用了FoldRotation参数用来确定元素在列表中的位置。
例如,FoldRotation= 30,列表第一个元素(FoldableItemLayout)的FoldRotation值为30,而第二个元素——FoldRotation= 150,最多可以同时显示不超过2个元素。FoldRotation参数值的范围依赖于元素的数量:如果列表包含一个元素,那么取值范围就会是[0,0],2——[0,180],3——[0,360]等。
打开动画
在学会了在几个元素之间使用折叠动画滚动之后,我们解决了这个重大的挑战:从任意的起点生成元素的打开动画。利用已经实现的FoldableListLayout,并使其在两个元素之间进行切换:封面布局和详情布局。这两种元素都应该显示在屏幕上,但详情元素应该是隐藏的。当用户点击一个封面元素时,应用程序会记住当时的位置,并使用相同大小的空占位符视图取代它(以免破坏屏幕上的其他元素),并移动盖元素的下半专门创建的布局。以后这种布局将被用作FoldableListLayout的第一个元素。第二个元素将被替换为空占位视图,与封面元素的方式相同。
对齐
眼见封面元素已经从屏幕上的最初位置展开,因此在动画过程中我们的FoldableListLayout需要在封面元素和详情元素的位置之间移动。这就是为什么要记住在动画初始化过程中每个元素的初始位置和大小的原因。由于封面和详情的大小有可能不同,我们需要在动画期间同时扩展它们,以便使它们的宽度一致。
我们基本已经完工,只差一件事:缩放后,封面的高度可能看起来比下半部分的详情小。这意味着你需要隐藏图像的剩余部分。
下面的屏幕截图显示了在动画的开始部分有一个灰色区域,下层的详情部分与封面的大小不符。
我们为FoldableItemLayoutm引入一个额外的RollingDistance参数解决了这个问题。这个参数负责从折线垂直移动图像。使用这个参数可以在动画的第一部分中的不知不觉中转换详情的一部分,然后在第二部分中全尺寸展开。
动画现在就可以运行了,余下的工作就是为逼真的效果添加一些暗化,或为平滑的样子添加些阴影。本类库在GitHub上可以随意使用,在那里你还可以找到一个使用例子。一如既往的欢迎pull请求。
E. android手机默认浏览器,使用canvas画图会重复出现两次图像以及动画效果
您好,您可以把他卸载,之后更换别的浏览器试试,可以用用UC浏览器,很好用的。
F. Android 制作逐渐显示动画(描边动画、矢量动画VectorDrawble)
Android 系统从5.0开始支持矢量图,可以通过 Android Studio自带的 Vector Assert 工具将SVG、PSD 转成VectorDrawble。
转化好的VectorDrawblew看起来好像挺复杂,是不是完全看不懂。没关系,只要转化的图形没有问题,你不用关心其内部数据。
我们直接进入矢量动画部分。
矢量动画的实现通过在xml定义<animated-vector>标签(其对应的Java对象是AnimatedVectorDrawable)实现,如下所示:
可以看到<animated-vector>标签是主要元素是target,它其实就起到一个桥梁作用,将动画和VectorDraw中的图形联系起来。
比如target1,它将属性动画splash_animator_draw和vectorDrawble对象中name等于line1的对象联系起来,即:动画将生效在line1对象上。
之前展示了由svg图片通过Android Studio Vector Assert工具转换过来的VectorDrawble,里面的实际上svg画图语法,<path>标签里的pathData包含了画图的路径(坐标)和语法
在实际使用过程中有几率遇到这样两个问题(笔者都遇到过):
其实以上两个问题都要求你掌握进阶知识,svg画图语法。
官方svg语法解析: https://www.w3.org/TR/SVG/paths.html
不喜欢看英文,去这篇博客: http://www.jianshu.com/p/a3cb1e23c2c4
对于Android程序员,Lottie的动画使用很简单,步骤如下:
1.接入Lottie
从动画实现上来说,Lottie动画应该是最简单的方法了。
Lottie的优点很明显:
Lottie的缺点:
好了,如果觉得本文对你有帮助,请关注、留言、点赞我,谢谢!
G. android中的动画有哪几类,它们的特点和区别是什么
android动画有两类:
一种是tweened animation(渐变动画)
一种是frame by frame(逐帧动画)
特点:
渐变动画是通过改变view的大小、旋转的角度、透明度、位置来产生动画,可以控制动画的播放快慢以及加速度。
逐帧动画是用一组图片轮流绘制,产生动画的感觉。类似于gif图片。
区别:
渐变动画的所有操作是通过矩阵变换对同一个物体(绘制的一个view或者图片)进行操作产生动画。
而逐帧动画是多个物体(多张图片)进行绘制,可以说这多张图片是不相关的(从播放的角度来看只能说是内容相关)。
H. android 的动画效果怎么做
1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;
2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。
动画类型
下面先来看看Android提供的动画类型。Android的animation由四种类型组成
在XML文件中:
alpha 渐变透明度动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果
在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性:
AlphaAnimation渐变透明度动画效果
ScaleAnimation渐变尺寸伸缩动画效果
TranslateAnimation画面转换位置移动动画效果
RotateAnimation画面转移旋转动画效果
I. Android自定义加载动画
绘制
Invalidate触发绘制(刷新)
ValueAnimator属性动画
canvas画布的一些操作:translate(重新映射画布上的 (0,0) 位置),alpha,scale(缩放当前绘图至更大或更小),rotate(旋转当前绘图)
1、创建动画的类继承view,并实现构造函数
2、定义动画图像的各种属性:半径、间距
要画图前首先要确定图像的位置,大小
可以画图像布局示意图:
大圆半径为3R,小圆半径为1R,两圆间距为0.5R。则可以得出:
布局图像最大长度minWidth:(2*3R+2*R+0.5R)= 8.5R
布局图像最大高度minHight:2*3R=6R
圆心位置:屏幕宽度为width,屏幕高度为hight
大圆心所在水平位置Cx:(width-minWidth)/ 2+3R
大圆心所在竖直位置Cy: hight/2
3、通过onSizeChaged获得对应的尺寸变化
4、onDraw方法进行对应的绘制
使用drawCircle需要:cx,cy,半径,画笔
因此需要自己配置画笔:
实现动画效果:
ration:动画的持续时间
repeatCount:动画的重复
每次动画都重新绘制:invalidate()
同理:在创建一个动画
同时执行动画:animator.playTogether()
启动动画和结束动画:
设置点击事件:
初始化点击事件:
并在main_Activity中调用init()即可实现动画:
J. 安卓canvas绘制的图形可以用animation的那些效果么
使用HTML5画布canvas能够快速实现简单的动画效果,基本原理如下:
每隔一定时间绘制图形并且清除图形,用来模拟出一个动画过程,可以使用context.clearRect(0, 0, x, y)方法来刷新需要绘制的图形
首先是绘制图形的方法,如下:
function myAnimation() {
ctx.clearRect(0, 0, canvas_size_x, canvas_size_y);
if (x_icon < 0 || x_icon > canvas_size_x - size_x) {
stepX = -stepX;
}
if (y_icon < 0 || y_icon > canvas_size_y - size_y) {
stepY = -stepY;
}
x_icon += stepX;
y_icon += stepY;
ctx.drawImage(anim_img, x_icon, y_icon);
}
以上方法每隔一定时间清除画布内容,并且重新计算绘制图形位置,一旦超过了画布大小,则反转坐标绘制图形。