android动画之通过子线程来实现动画

使用android动画机制,往往是相对于原始位置来进行参照。

这里通过子线程修改物体位置实现动画。

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <TextView        android:id="@+id/show"        android:layout_marginLeft="20dp"        android:layout_marginTop="40dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />    <Button        android:id="@+id/button1"        android:onClick="MyCLick"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:text="行动" />    <Button        android:id="@+id/button2"        android:onClick="MyCLick"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_marginRight="28dp"        android:layout_toLeftOf="@+id/button1"        android:text="获取位置" /></RelativeLayout>

动画代码:

public class MainActivity extends Activity {TextView textView;MyRuns myRuns;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.show);myRuns=new MyRuns(new MyHead(textView, 4, 8), true);//位移动画}static class MyHead extends Handler {// 坐标动画View view;// 操作元素float cx;float cy;public MyHead(View view, float cx, float cy) {super();this.view = view;this.cx = cx;this.cy = cy;}@Overridepublic void handleMessage(Message msg) {// 更新uiview.setX(view.getX() + cx);view.setY(view.getY() + cy);super.handleMessage(msg);}}// 子线程更新位置class MyRuns implements Runnable {//更新UI界面MyHead head;boolean isFire = false;public MyRuns(MyHead head, boolean isFire) {super();this.head = head;this.isFire = isFire;}public boolean isFire() {return isFire;}public void setFire(boolean isFire) {this.isFire = isFire;}@Overridepublic void run() {// TODO Auto-generated method stubtry {while (true) {if (!isFire) {break;//停止动画}Thread.sleep(80);Message message = new Message();message.what = 3;message.obj = "";head.sendMessage(message);}} catch (Exception e) {// TODO: handle exception}}}//开始运动void StartThreed(MyRuns myRuns){myRuns.setFire(true);//开启new Thread(myRuns).start();}public void MyCLick(View view) {if (view.getId() == R.id.button1) {StartThreed(myRuns);} else if (view.getId() == R.id.button2) {myRuns.setFire(false);//结束子线程Toast.makeText(getApplicationContext(),"坐标" + textView.getX() + "||" + textView.getY(),Toast.LENGTH_SHORT).show();}}}

原文地址:http://sijienet.com/bbs/?leibie=showinfo&id=57

更多相关文章

  1. Android(安卓)资料整理
  2. android addIdleHandler 空闲线程 解析
  3. 动画代码Android动画学习笔记动画代码
  4. android页面切换仿iphone从右往左
  5. android Canvas.drawBitmap 方法的理解
  6. android anr traces日志分析方法
  7. Android(安卓)当前线程是否为主线程(UI线程)
  8. Android(安卓)Activity和Fragment的转场动画
  9. android ProgressBar定制模式,自定义模式动画文件

随机推荐

  1. 【转】升级android sdk时A folder failed
  2. 解决ArcGIS Android Could not find clas
  3. android 属性android:visibility
  4. Android 回调机制
  5. Android中SQLite数据库操作(1)——使用SQL
  6. Android(安卓)高仿 频道管理----网易、今
  7. android ubuntu下NDK的开发
  8. Android中的布局管理
  9. Android SDK开发 -- TitleBar重构 (代理模
  10. Android 常用样式设置