无需创建额外的Runnable
实例或您自己的线程。
在该onCreate
方法中,您要做的就是调用setContentView
并向处理程序发送一条空消息。
在handleMessage
您的实例的方法中Handler
,设置 TextView 的 X 和 Y 并延迟发布另一条空消息。
这是一个可以做你想做的事情的活动。它使用 anAbsoluteLayout
来对不推荐使用的进行绝对定位TextView
,但它应该展示Handler
您问题的核心部分。
package com.scompt.so16209790;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
import java.lang.ref.WeakReference;
import java.util.Random;
public class MainActivity extends Activity {
private static final Random RANDOM = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Handler handler = new RandomMoveHandler((TextView) findViewById(R.id.text_view));
handler.sendEmptyMessage(0);
}
// Make the handler subclass static because of this: http://stackoverflow.com/a/11408340/111777
private static class RandomMoveHandler extends Handler {
private final WeakReference<TextView> textViewWeakReference;
private RandomMoveHandler(TextView textView) {
this.textViewWeakReference = new WeakReference<TextView>(textView);
}
@Override
public void handleMessage(Message msg) {
TextView textView = textViewWeakReference.get();
if (textView == null) {
Log.i(TAG, "WeakReference is gone so giving up.");
return;
}
int x = RANDOM.nextInt(350 - 100);
int y = RANDOM.nextInt(800 - 100);
Log.i(TAG, String.format("Moving text view to (%d, %d)", x, y));
textView.setX(x);
textView.setY(y);
//change the text position here
this.sendEmptyMessageDelayed(0, 3000);
}
}
private static final String TAG = MainActivity.class.getSimpleName();
}
main
布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="0px"
android:layout_y="0px"
android:text="Hello World, MainActivity"
/>
</AbsoluteLayout>