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

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值