怎么看自己的网站是用什么做的,可以做公司宣传的网站有哪些内容,软件设计师证书有用吗,网站建设四个阶段的流程本节引言#xff1a; 从本节开始我们来探究Android中的动画#xff0c;毕竟在APP中添加上一些动画#xff0c;会让我们的应用变得 很炫#xff0c;比如最简单的关开Activity#xff0c;当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类#xff0c;逐帧动画…本节引言 从本节开始我们来探究Android中的动画毕竟在APP中添加上一些动画会让我们的应用变得 很炫比如最简单的关开Activity当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类逐帧动画(Frame)以及补间动画(Tween)还有Android 3.0以后引入的属性动画 (Property)而本节给大家带来的是第一种动画——逐帧动画的一个基本使用~ 1.帧动画概念以及用法 帧动画非常容易理解其实就是简单的由N张静态图片收集起来然后我们通过控制依次显示 这些图片因为人眼视觉残留的原因会让我们造成动画的错觉跟放电影的原理一样 而Android中实现帧动画一般我们会用到前面讲解到的一个DrawableAnimationDrawable 先编写好Drawable然后代码中调用start()以及stop()开始或停止播放动画~ 当然我们也可以在Java代码中创建逐帧动画创建AnimationDrawable对象然后调用 addFrame(Drawable frame,int duration)向动画中添加帧接着调用start()和stop()而已~ 下面我们来写两个例子体会下帧动画的效果以及熟悉下用法 2.使用示例
示例一最简单的例子
运行效果图 代码实现
首先编写我们的动画文件非常简单先在res下创建一个anim目录接着开始撸我们的 动画文件miao_gif.xml 这里的android:oneshot是设置动画是否只是播放一次true只播放一次false循环播放
?xml version1.0 encodingutf-8?
animation-list xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:oneshotfalseitemandroid:drawablemipmap/img_miao1android:duration80 /itemandroid:drawablemipmap/img_miao2android:duration80 /itemandroid:drawablemipmap/img_miao3android:duration80 /!--限于篇幅省略其他item自己补上--...
/animation-list
动画文件有了接着到我们的布局文件activity_main.xml
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalButtonandroid:idid/btn_startandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text开始 /Buttonandroid:idid/btn_stopandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text停止 /ImageViewandroid:idid/img_showandroid:layout_width120dpandroid:layout_height120dpandroid:layout_gravitycenterandroid:backgroundanim/miao_gif //LinearLayout
最后是我们的MainActivity.java这里在这里控制动画的开始以及暂停
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_start;private Button btn_stop;private ImageView img_show;private AnimationDrawable anim;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindViews();anim (AnimationDrawable) img_show.getBackground();}private void bindViews() {btn_start (Button) findViewById(R.id.btn_start);btn_stop (Button) findViewById(R.id.btn_stop);img_show (ImageView) findViewById(R.id.img_show);btn_start.setOnClickListener(this);btn_stop.setOnClickListener(this);}Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_start:anim.start();break;case R.id.btn_stop:anim.stop();break;}}
}
好的非常的简单哈~ 示例二在指定地方播放帧动画
运行效果图 代码实现
依旧是先上我们的动画文件:anim_zhuan.xml
animation-list xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:oneshottrueitemandroid:drawablemipmap/img_zhuan1android:duration80 /itemandroid:drawablemipmap/img_zhuan2android:duration80 /itemandroid:drawablemipmap/img_zhuan3android:duration80 /!--限于篇幅省略其他item自己补上--...
/animation-list
接着我们来写一个自定义的ImageViewFrameView.java这里通过反射获得当前播放的帧 然后是否为最后一帧是的话隐藏控件
/*** Created by Jay on 2015/11/15 0015.*/
public class FrameView extends ImageView {private AnimationDrawable anim;public FrameView(Context context) {super(context);}public FrameView(Context context, AttributeSet attrs) {super(context, attrs);}public FrameView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public void setAnim(AnimationDrawable anim){this.anim anim;}public void setLocation(int top,int left){this.setFrame(left,top,left 200,top 200);}Overrideprotected void onDraw(Canvas canvas) {try{//反射调用AnimationDrawable里的mCurFrame值Field field AnimationDrawable.class.getDeclaredField(mCurFrame);field.setAccessible(true);int curFrame field.getInt(anim);// 获取anim动画的当前帧if (curFrame anim.getNumberOfFrames() - 1)// 如果已经到了最后一帧{//让该View隐藏setVisibility(View.INVISIBLE);}}catch (Exception e){e.printStackTrace();}super.onDraw(canvas);}
} 最后是我们的MainActivity.java创建一个FrameLayout添加View对触摸事件中按下的 事件做处理显示控件以及开启动画~
public class MainActivity extends AppCompatActivity {private FrameView fView;private AnimationDrawable anim null;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);FrameLayout fly new FrameLayout(this);setContentView(fly);fView new FrameView(this);fView.setBackgroundResource(R.anim.anim_zhuan);fView.setVisibility(View.INVISIBLE);anim (AnimationDrawable) fView.getBackground();fView.setAnim(anim);fly.addView(fView);fly.setOnTouchListener(new View.OnTouchListener() {Overridepublic boolean onTouch(View v, MotionEvent event) {//设置按下时才产生动画效果if(event.getAction() MotionEvent.ACTION_DOWN){anim.stop();float x event.getX();float y event.getY();fView.setLocation((int) y - 40,(int)x-20); //View显示的位置fView.setVisibility(View.VISIBLE);anim.start(); //开启动画}return false;}});}
}