您的位置:首页 > 移动开发 > Android开发

android中的帧动画(Frame)+图片自动播放器(ViewFlipper)

2015-11-23 10:04 633 查看

android中的帧动画(Frame)

实现Frame的两种方式:

①:在xml文件的基础上

②:在java代码的基础上

先说一下我对帧动画的理解:创建某个对象用来放一帧一帧的动画,然后start()就可以了,其实就是一张张图片评出来的,像连环画一样

第一种方法:

①主xml文件中(创建一个ImageView,用来显示动画【也就是图片】):

<ImageView
android:id="@+id/image"
android:layout_width="200px"
android:layout_height="200px" />


②frame.xml文件(用来存储图片和图片间隔时间的xml, res/anim/frame.xml):

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/tupian1" android:duration="500"></item>
<!—duration代表时间间隔 -->
<item android:drawable="@drawable/tupian2" android:duration="500"></item>
<item android:drawable="@drawable/tupian3" android:duration="500"></item>
</animation-list>


③java文件中:

ImageView iv;
AnimationDrawable ad;//这个可以看做是帧动画的容器

iv = (ImageView) findViewById(R.id.image);
iv.setBackgroundResource(R.anim.frame);//让iv显示图片
ad = (AnimationDrawable) iv.getBackground();
//把iv中图片添加到帧动画容器中
ad.start();//开始动画
ad.stop();//停止动画


第二种方法:

①在主xml文件中,添加一个布局,用来显示动画,大小自定:

<LinearLayout
android:id="@+id/lll"
android:layout_width="200dp"
android:layout_height="150dp"
android:orientation="horizontal">
</LinearLayout>


②在java文件中,创建一个类:

public class FrameTest2 extends View {
private AnimationDrawable ad = null;
private Context mContext = null;
private Drawable mbitAnimation = null;

public FrameTest2(Context context) {
// TODO Auto-generated constructor stub
super(context);
mContext = context;
ad = new AnimationDrawable();
for (int i = 1; i <= 3; i++) {
int id = getResources().getIdentifier("tupian" + i, "drawable", mContext.getPackageName());
mbitAnimation=getResources().getDrawable(id);
ad.addFrame(mbitAnimation, 1000);
/*增加一帧动画,间隔为一千毫秒,这里的getIdentifier中的三个参数的意思是:文件名字,文件属性,包名,可以看做是R.drawable.XXXX */
}

/* mbitAnimation = getResources().getDrawable(R.drawable.tupian2);
ad.addFrame(mbitAnimation, 1000);
mbitAnimation = getResources().getDrawable(R.drawable.tupian1);
ad.addFrame(mbitAnimation, 1000);
mbitAnimation = getResources().getDrawable(R.drawable.tupian3);
ad.addFrame(mbitAnimation, 1000);
*/
//  /**/中的部分可以与上面的for循环中的代码同义替换
ad.setOneShot(false);//执行一次?
setBackgroundDrawable(ad);//算是跟View绑定了
ad.start();
}


③在主类中:

LinearLayout ll;
View viewtest;

ll = (LinearLayout) findViewById(R.id.lll);
viewtest = new FrameTest2(this);
//生成View对象
ll.addView(viewtest);
//添加View到xml文件中


另外补充个方法:将java文件生成的view如何添加到xml中的某个确定的位置,由于我实在找不到可以直接在View控件里添加java代码生成的View,所以只能借助布局文件对象的addView方法。哪位高人有其他的方法,求指教!!!

有些代码可能比较简单,我本来想上传源代码,可是不会,呵呵哒

如果要实现图片自动浏览的功能,用ViewFlipper更加方便

主布局文件(activity_main.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ViewFlipper
android:id="@+id/vf"
android:layout_width="match_parent"
android:layout_height="187dp"
android:flipInterval="1000"
android:persistentDrawingCache="animation" >

<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/img1" />

<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/img2" />

<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/img3" />
</ViewFlipper>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="auto"
android:text="自动播放" />

</LinearLayout>


注意这里直接在布局文件注册了onclick事件。

主activity文件(MainActivity.java):

public class MainActivity extends Activity {
ViewFlipper vf;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vf = (ViewFlipper) findViewById(R.id.vf);

}

public void auto(View source) {
vf.setInAnimation(this, android.R.anim.slide_in_left);
//设置图片进入的动画
vf.setOutAnimation(this, android.R.anim.slide_out_right);
//设置图片出去的动画
vf.startFlipping();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: