2

在我的应用程序中,我想播放 gif 图像,我可以播放 gif 图像,但我想处理 gif 图像,例如单击开始按钮动画应该开始,如果单击停止按钮动画应该停止。

     strtbtn.setOnClickListener(this);

      public void onClick(View v) {
        // TODO Auto-generated method stub
        Canvas canvas=new Canvas(mBitmap);
        long now = android.os.SystemClock.uptimeMillis();
        if (mMovieStart == 0) {   // first time
            mMovieStart = now;
        }
        if (mMovie != null) {
            int dur = mMovie.duration();
            if (dur == 0) {
                dur = 1000;
            }
            int relTime = (int)((now - mMovieStart) % dur);
            mMovie.setTime(relTime);
            mMovie.draw(canvas, mBitmap2.getWidth() - mMovie.width(),
                        mBitmap2.getHeight() - mMovie.height());
      //                invalidate();
            Log.i("movie",""+mMovieStart);
            Log.i("jjhjhhnjhj",""+mMovie);
        }
    }

请帮助我如何启动和停止 gif 动画图像。在此先感谢。

4

1 回答 1

0

步骤1

找出你想要的动画图像。它们应该是按顺序排列的,这样我们才能意识到它是连续翻转的。GIF,PNG等图像文件类型。找到后,将它们复制并通过复制粘贴的方式放置它们

“你的项目” -> res -> drawable-mdpi -> 粘贴图片

Drawable 分为三类

hdpi-> high dots per inch
ldpi->large dots per inch
mdpi->medium dots per inch

第2步

有两种方法可以执行此动画。1) 通过创建“BitmapDrawable”对象,2) 通过创建“动画”xml 文件。我们将一一看到这两种方法。

使用“BitmapDrawable”

Syntax:

BitmapDrawable object=(BitmapDrawable) getResources().getDrawable(R.drawable.<image_name>);

Example

Suppose I have image named "sample.png" in "res.drawable" directory, then



 BitmapDrawable frame1=(BitmapDrawable)getResources().getDrawable(R.drawable.sample);


 AnimationDrawable animation = new AnimationDrawable();

Now, we can add frames which we have created above as like you want.

Syntax:



 AnimationDrawable.addFrame(BitmapDrawable,duration);

Example



 animation.addFrame(frame1,1000);

In this animation, while you start this animation, it will stop after last added frame. If you like to continue this animation, following method must be implemented.

动画.setOneShot(false);

Now, bind "ImageView" object of layout



  ImageView img=(ImageView)findViewById(R.id.imageView1);
    img.setBackgroundDrawable(animation);   



    animation.start();
    animation.stop();

Description:
    Duration is in milliseconds.
    setBackgroundDrawable(animation) method will set background with animation and give control over animation.
    start() method will start your animation and stop() will stop this animation.

  <?xml version="1.0" encoding="utf-8"?>
    <animation-list
      xmlns:android=http://schemas.android.com/apk/res/android
      android:oneshot="false">
      <item android:drawable="@drawable/sample1" android:duration="50"/>
      <item android:drawable="@drawable/sample2" android:duration="50"/>
      <item android:drawable="@drawable/sample3" android:duration="50"/>
    </animation-list>

In above code, I have added 3 frames with "android:drawable" attribute and duration in milliseconds.

Now, bind "ImageView" object with layout and implement following methods.



  ImageView img=(ImageView)findViewById(R.id.imageView1);
    img.setImageBitmap(null);
    img.setBackgroundResource(R.anim.animation);

Next, create object of "AnimatinDrawable" and give background to "AnimationDrawable" so that it can handle it.



  AnimationDrawable animation = (AnimationDrawable) img.getBackground();
    animation.start();
    animation.stop();

使用“BitmapDrawable”

主.java

package com.animationapp;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class AnimationAppActvity extends Activity {
    /** Called when the activity is first created. */

    ImageView img;
    Button btnStart,btnStop;
    AnimationDrawable animation;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        int duration = 150;
        img = (ImageView)findViewById(R.id.imageView1);

        BitmapDrawable frame1 =
            (BitmapDrawable)getResources().getDrawable(R.drawable.d1);
        BitmapDrawable frame2 =
            (BitmapDrawable)getResources().getDrawable(R.drawable.d2);
        BitmapDrawable frame3 =
            (BitmapDrawable)getResources().getDrawable(R.drawable.d3);       

        animation = new AnimationDrawable();       
        animation.addFrame(frame1, duration);
        animation.addFrame(frame2, duration);
        animation.addFrame(frame3, duration);

        animation.setOneShot(false);

        img.setBackgroundDrawable(animation);

        btnStart = (Button)findViewById(R.id.btnStart);
        btnStop = (Button)findViewById(R.id.btnStop);

        btnStart.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                  // TODO Auto-generated method stub
                  animation.start();
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
             // TODO Auto-generated method stub
             animation.stop();
             }
        });
    }
} 

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<ImageView
      android:layout_height="wrap_content"
      android:id="@+id/imageView1"
      android:layout_width="wrap_content"
      android:minHeight="191px" android:minWidth="285px">
</ImageView>
<Button
      android:text="Start"
      android:id="@+id/btnStart"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
</Button>
<Button
      android:text="Stop"
      android:id="@+id/btnStop"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
</Button>
</LinearLayout> 

使用“animation.xml”文件

package com.AnimApp;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView; 

public class AnimAppActivity extends Activity {
    /** Called when the activity is first created. */

      Button btnStart,btnStop;
      ImageView img;
      AnimationDrawable animation;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnStart=(Button)findViewById(R.id.button1);
        btnStop=(Button)findViewById(R.id.button2);

        img=(ImageView)findViewById(R.id.imageView1);       
        img.setBackgroundResource(R.anim.animation);
        animation=(AnimationDrawable)img.getBackground();

        btnStart.setOnClickListener(new View.OnClickListener() {   
              @Override
              public void onClick(View v) {
                   // TODO Auto-generated method stub
                   animation.start();
              }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
            // TODO Auto-generated method stub
            animation.stop();
            }
        });
    }
}

动画.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:oneshot="false">
  <item android:drawable="@drawable/d1" android:duration="50"/>
  <item android:drawable="@drawable/d2" android:duration="50"/>
  <item android:drawable="@drawable/d3" android:duration="50"/>
</animation-list>
于 2012-09-13T12:56:45.417 回答