[英]How to start and stop gif images in android
In my application i want to play gif images i am able to play gif images but i want to handle gif images like if i click start button animation should start and if click stop button animation should stop. 在我的应用程序中,我想播放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);
}
}
please help me how to start and stop gif animated images.Thanks in advance. 请帮助我如何启动和停止gif动画图像。谢谢。
Step 1 第1步
Find out images which you want for animation. 找出要动画的图像。 They should be in sequence so that we can realize it as flipping continuously. 它们应该按顺序排列,以便我们可以实现连续翻转。 File type of images like GIF, PNG etc. After finding, copy them and place them by copy and paste in 图片的文件类型,例如GIF,PNG等。找到后,将其复制并通过复制和粘贴将其放置
"Your project" -> res -> drawable-mdpi -> paste images “您的项目”-> res-> drawable-mdpi->粘贴图像
Drawable has three categories 可绘制有三类
hdpi-> high dots per inch
ldpi->large dots per inch
mdpi->medium dots per inch
Step 2 第2步
There are two methods to perform this animation. 有两种方法可以执行此动画。 1) By creating "BitmapDrawable" objects, 2) By creating "animation" xml file. 1)通过创建“ BitmapDrawable”对象,2)通过创建“动画” xml文件。 We will see both method one by one. 我们将一一介绍这两种方法。
Do with "BitmapDrawable" 使用“ 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.
animation.setOneShot(false); animation.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();
Using "BitmapDrawable" 使用“ BitmapDrawable”
Main.java Main.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();
}
});
}
}
Layout file 布局文件
<?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>
Using "animation.xml" file 使用“ 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();
}
});
}
}
animation.xml animation.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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.