其实碰撞问题只是涉及到一点小算法而已,但在实际应用,尤其游戏中有可能会遇到,下面给出一个小示例,代码如下:

MainActivity:

  1. package com.lovo;
  2. import android.os.Bundle;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.ImageView;
  9. import android.widget.RelativeLayout;
  10. import android.app.Activity;
  11. public class MainActivity extends Activity {
  12. private Handler handler;
  13. public static final int MOVE_IMAGE = 1;
  14. // 移动方向和距离
  15. private int decX = 5;
  16. private int decY = 5;
  17. // 坐标
  18. private int moveX;
  19. private int moveY;
  20. private boolean isMove;// 是否正在移动
  21. private RelativeLayout relative;
  22. private ImageView imageView;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. imageView = (ImageView) findViewById(R.id.activity_main_image);
  28. handler = new MyHandler(this);
  29. relative = (RelativeLayout) findViewById(R.id.activity_main_relativelayout);
  30. Button endBtn = (Button) findViewById(R.id.activity_main_btn_end);
  31. endBtn.setOnClickListener(new OnClickListener() {
  32. @Override
  33. public void onClick(View v) {
  34. isMove = false;
  35. }
  36. });
  37. Button btn = (Button) findViewById(R.id.activity_main_btn_start);
  38. btn.setOnClickListener(new OnClickListener() {
  39. @Override
  40. public void onClick(View v) {
  41. if (!isMove) {
  42. isMove = true;
  43. } else {
  44. return;
  45. }
  46. new Thread() {
  47. public void run() {
  48. while (isMove) {
  49. moveX += decX;
  50. moveY += decY;
  51. if ((moveX + imageView.getWidth()) >= relative
  52. .getWidth() || moveX < 0) {
  53. decX = -decX;
  54. }
  55. if ((moveY + imageView.getHeight()) >= relative
  56. .getHeight() || moveY < 0) {
  57. decY = -decY;
  58. }
  59. Message message = new Message();
  60. message.what = MOVE_IMAGE;
  61. Bundle bundle = new Bundle();
  62. bundle.putInt("moveX", moveX);
  63. bundle.putInt("moveY", moveY);
  64. message.setData(bundle);
  65. handler.sendMessage(message);
  66. try {
  67. Thread.sleep(10);
  68. } catch (InterruptedException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. };
  73. }.start();
  74. }
  75. });
  76. }
  77. }

MyHandler类:

  1. package com.lovo;
  2. import android.app.Activity;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.widget.ImageView;
  6. import android.widget.RelativeLayout;
  7. public class MyHandler extends Handler {
  8. private Activity activity;
  9. private ImageView imageView;
  10. public MyHandler(Activity activity) {
  11. this.activity = activity;
  12. }
  13. @Override
  14. public void handleMessage(Message msg) {
  15. super.handleMessage(msg);
  16. imageView = (ImageView) activity.findViewById(R.id.activity_main_image);
  17. if (msg.what == MainActivity.MOVE_IMAGE) {
  18. android.widget.RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
  19. RelativeLayout.LayoutParams.WRAP_CONTENT,
  20. RelativeLayout.LayoutParams.WRAP_CONTENT);
  21. // 利用Margin改变小球的位置
  22. lp.setMargins(msg.getData().getInt("moveX"),
  23. msg.getData().getInt("moveY"), 0, 0);
  24. imageView.setLayoutParams(lp);
  25. }
  26. }
  27. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/activity_main_relativelayout"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" >
  6. <LinearLayout
  7. android:layout_width="match_parent"
  8. android:layout_height="wrap_content"
  9. android:layout_alignParentBottom="true" >
  10. <Button
  11. android:id="@+id/activity_main_btn_start"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_weight="1"
  15. android:text="开始" />
  16. <Button
  17. android:id="@+id/activity_main_btn_end"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content"
  20. android:layout_weight="1"
  21. android:text="停止" />
  22. </LinearLayout>
  23. <ImageView
  24. android:id="@+id/activity_main_image"
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:src="@drawable/ball" />
  28. </RelativeLayout>

附上图片效果:

最新文章

  1. visual studio 2015中的webapi生成helpPage,页面不显示方法说明问题解决
  2. 记AppStore 被打回的经历
  3. SaltStack之Master配置文件详解
  4. [转]win7+ubuntu 13.04双系统安装方法
  5. oracle常用数据类型
  6. margin-top在IE与其他浏览器下的不同
  7. ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
  8. Spring与Akka的集成
  9. Oracle数据库常用命令记录
  10. CYQ.Data 支持分布式数据库(主从备)高可用及负载调试
  11. Python之--paramiko实例
  12. Python_Int
  13. add, subtract, multiply, divide
  14. Oracle数据库自带表或者视图
  15. Selling Souvenirs CodeForces - 808E (分类排序后DP+贪心)
  16. 洛谷P2014 选课
  17. Scala-IDE构建Maven项目
  18. android 开发 实现一个activity变成dialog对话框
  19. linux 终端分屏命令vsp(转)
  20. 线程池模块thernd

热门文章

  1. Android 之 Fagment 完全解析
  2. Exchanger的使用
  3. Run Test Case on Spark
  4. Canvas动画 位图缓存提高效率和对应的内存问题
  5. kettle 如何将excel文件导入oracle数据库?
  6. Redis从入门到精通:中级篇(转)
  7. CString与UTF8互转代码
  8. Unrecognized option: -jrockit
  9. 转:Ogre TerrainGroup地形赏析
  10. 可扩展的Web系统和分布式系统(Scalable Web Architecture and Distributed Systems)