android动画之通过子线程来实现动画
16lz
2021-01-25
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
更多相关文章
- Android(安卓)资料整理
- android addIdleHandler 空闲线程 解析
- 动画代码Android动画学习笔记动画代码
- android页面切换仿iphone从右往左
- android Canvas.drawBitmap 方法的理解
- android anr traces日志分析方法
- Android(安卓)当前线程是否为主线程(UI线程)
- Android(安卓)Activity和Fragment的转场动画
- android ProgressBar定制模式,自定义模式动画文件