ImageView增加动画效果
2016-06-05 21:23
253 查看
给ImageView增加动画背景+随意拖动
步骤:
1.创建animation-list的动画xml文件2.将上一步的xml设置为ImageView对象的背景资源
3.start动画
代码:
(代码中顺便为ImageView对象加上了随意拖动效果)import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AlphaAnimation;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView rocketImage;
private Display display;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
int y = (Integer) msg.obj;
rocketImage.layout(rocketImage.getLeft(), y, rocketImage.getRight(), y +rocketImage.getHeight());
};
};
private AlphaAnimation aa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aa = new AlphaAnimation(0.0f,1.0f);
aa.setDuration(500);
aa.setRepeatCount(1);
aa.setRepeatMode(AlphaAnimation.REVERSE);
aa.setFillAfter(true);
// 得到默认的分辨率对象
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
display = wm.getDefaultDisplay();
rocketImage = (ImageView) findViewById(R.id.iv_rocket);
// 加载动画资源文件
rocketImage.setBackgroundResource(R.drawable.rocket);
// 得到空间上的动画对象
AnimationDrawable rocketAnimation = (AnimationDrawable) rocketImage
.getBackground();
rocketAnimation.start();
rocketImage.setOnTouchListener(new OnTouchListener() {
private int startX;
private int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
// 得到触摸事件的类型
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:// 按下的事件
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:// 移动的事件
// 2、在移动的过程中得到结束坐标点
int endX = (int) event.getRawX();
int endY = (int) event.getRawY();
// 3、计算移动的偏移量
int dX = endX - startX;
int dY = endY - startY;
// 4、更新图标的位置
int l = rocketImage.getLeft() + dX;
int t = rocketImage.getTop() + dY;
int r = rocketImage.getRight() + dX;
int b = rocketImage.getBottom() + dY;
if (l < 0 || t < 0 || r > display.getWidth()
|| (b + 40) > display.getHeight()) {
break;
}
rocketImage.layout(l, t, r, b);
// 5、得到新的开始坐标点
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:// 抬起的事件
int ll = rocketImage.getLeft();
int lr = rocketImage.getRight();
int lb = rocketImage.getBottom();
if(ll > 100 && lr < 300 && lb > 350){
sendRocket();
iv_bottom.startAnimation(aa);
iv_top.startAnimation(aa);
}
break;
}
return true;
}
});
}
private void sendRocket() {
new Thread(){
public void run() {
for(int i= 0; i< 12;i++){
SystemClock.sleep(10);
int y = 480-i*48;
Message msg = Message.obtain();
msg.obj = y;
handler.sendMessage(msg);
// rocketImage.layout(rocketImage.getLeft(), y, rocketImage.getRight(), y +rocketImage.getHeight());
}
};
}.start();
}
}
rocket.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/desktop_rocket_launch_1" android:duration="200" />
<item android:drawable="@drawable/desktop_rocket_launch_2" android:duration="200" />
</animation-list>
相关文章推荐
- Android使用PowerImageView实现播放强大的ImageView动画效果
- XTEA加密的一种JAVA实现,64轮,CBC模式,0填充
- iOS app旧貌换新颜(一)Launch Page让Logo"飞"出屏幕
- tomcat学习概要笔记
- C语言学习篇-10指针与字符串、函数指针
- task_struck字段介绍【转载】
- c++实验7-特殊三位数
- codeforce之最少加多少能组成一个凸三角形
- 多线索(Multi_Threaded)DBMS的概念
- 本周总结
- C++第五次作业
- apt-get 的基本使用方法
- SQL server2012语法大全
- web.xml中出现<servlet-name>default</servlet-name>是什么意思?
- jquery中Callbacks对象的实现
- [GitHub]第三讲:简单分支操作
- Tomcat——程序架构
- 找出数组中只出现一次的两个数字
- Ubuntu下使用openssl编程
- 学习进度条——十四周