Android实现加载(loading)图片旋转的三种方式

我们在Android应用开发中可能经常用到类似如下效果的加载过程中的图片旋转效果:


上面的图片是一张gif格式的动态图片,我们知道,在Android中对gif动态图片的支持是不好的。可以通过第三方jar包来支持gif图片的显示。另外还有其他两种方式来实现图片旋转,下面逐一介绍。

方法一、直接使用gif动态图片。

1、首先将第三方GifView.jar包导入到工程目录libs目录下。下载:http://download.csdn.net/detail/pxc0215/7540095

2、在activity_main.xml布局文件中添加imageview控件。

<com.ant.liao.GifView
        android:id="@+id/img_gif"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:enabled="false"/>

3、MainActivity.java中的主要代码:

// 从xml中得到GifView的句柄,当然,事先还要引入GifView的包import com.ant.liao.GifView;
myGifView = (GifView) findViewById(R.id.img_gif);  
// 设置Gif图片源,首先要将loading.gif导入到drawable文件内
myGifView.setGifImage(R.drawable.loading);  
// 添加监听器  
myGifView.setOnClickListener(this); 
// 设置显示的大小,拉伸或者压缩
myGifView.setShowDimension(300, 300);  
// 设置加载方式:先加载后显示、边加载边显示、只显示第一帧再显示  
myGifView.setGifImageType(GifImageType.COVER);

方法二、使用Animation(android.view.animation.Animation)类实现图片旋转。

对于静态格式(如png格式)的图片,,可通过Animation类来实现图片旋转效果。

layout布局文件start.xml中,放入imageview控件:

<ImageView 
        android:id="@+id/img_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>

类文件中主要代码如下:

public class StartActivity extends Activity {
	private Animation myAlphaAnimation;//声明Animation类的对象
	private ImageView myImageView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.start);
		myImageView=(ImageView)findViewById(R.id.img_loading);//取到imageview控件
		myImageView.setImageResource(R.drawable.loading);//设置要显示的图片
		myAlphaAnimation=new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//设置图片动画属性,各参数说明可参照api
		myAlphaAnimation.setRepeatCount(3);//设置旋转重复次数,即转几圈
		myAlphaAnimation.setDuration(1000);//设置持续时间,注意这里是每一圈的持续时间,如果上面设置的圈数为3,持续时间设置1000,则图片一共旋转3秒钟
		myAlphaAnimation.setInterpolator(new LinearInterpolator());//设置动画匀速改变。相应的还有AccelerateInterpolator、DecelerateInterpolator、CycleInterpolator等
		myImageView.setAnimation(myAlphaAnimation);//设置imageview的动画,也可以myImageView.startAnimation(myAlphaAnimation)
		myAlphaAnimation.setAnimationListener(new AnimationListener() {	//设置动画监听事件	
			@Override
			public void onAnimationStart(Animation arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onAnimationRepeat(Animation arg0) {
				// TODO Auto-generated method stub

			}
			//图片旋转结束后触发事件,这里启动新的activity
			@Override
			public void onAnimationEnd(Animation arg0) {
				// TODO Auto-generated method stub
				Intent i2 = new Intent(StartActivity.this, MainActivity.class);
				startActivity(i2);
			}
		});
	}

}

通过以上代码,我们可以看到想要的静态图片旋转效果了。当然,动画可使用myAlphaAnimation.startNow()和myAlphaAnimation.cancel()来启动和停止。

PS:以上方法也可以制作成xml来保存动画。即在工程目录的res目录下创建anim目录,新建Android xml文件,这里命名为loading.xml,其中代码如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:fromDegrees="0"
        android:toDegrees="359"
        android:duration="1500"
        android:repeatCount="-1"
        android:pivotX="50%"
        android:pivotY="50%" />

</set>

在主类MainActivity中使用如下代码:

myImageView = (ImageView) findViewById(R.id.img_png);
myImageView.setImageResource(R.drawable.loading);
myAlphaAnimation=AnimationUtils.loadAnimation(this, R.anim.loading);
myAlphaAnimation.setInterpolator(new LinearInterpolator());
myImageView.startAnimation(myAlphaAnimation);

这样,效果和上面的方法一样。

方法三:使用多幅图片交替播放,大家可以谷歌,这里省略。

===================================================================

科普:

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式:

1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。

动画类型

下面先来看看Android提供的动画类型。Android的animation由四种类型组成

在XML文件中:

  • alpha        渐变透明度动画效果
  • scale        渐变尺寸伸缩动画效果
  • translate  画面转换位置移动动画效果
  • rotate      画面转移旋转动画效果

在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性:

  • AlphaAnimation渐变透明度动画效果
  • ScaleAnimation渐变尺寸伸缩动画效果
  • TranslateAnimation画面转换位置移动动画效果
  • RotateAnimation画面转移旋转动画效果

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值