我想要实现这个目标:
活动以没有ClickListener开始,并且有四个文本视图全部为白色背景
我想将textview 1的颜色更改为蓝色。等待2秒钟然后将其更改为白色并将textview 2更改为蓝色。等待2秒,然后将其改回白色...依此类推,直到我将textview 4变为蓝色并返回白色。
完成后,我想添加ClickListener并等待用户输入。
我怎样才能做到这一点?我是Android新手,但理解点点滴滴。
答案 0 :(得分:2)
您可以通过在XML或Java代码中创建Animation序列并按顺序触发它们来实现此目的。您需要使用LayoutAnimationController定义动画序列,在动画结束时,您可以添加ClickListener。
Developer Life有一个good tutorial to get you started on animations。 Jeff有一个关于动画的两部分系列教程 - part 1,part 2。
希望这有帮助, indyfromoz
答案 1 :(得分:1)
无需为此动画或动画创建线程。
解决方案非常简单:使用Handler.postDelayed()或Handler.sendMessageDelayed():
http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,长) http://developer.android.com/reference/android/os/Handler.html#sendMessageDelayed(android.os.Message,长)
对于健壮的实现,请务必至少通过Activity.onDestroy()删除所有待处理的消息。 (或者如果您在Activity.onStart()中发布它们,请在Activity.onStop()中删除它们;如果在Activity.onResume()中发布,则在Activity.onPause()中删除。)
答案 2 :(得分:0)
我有一个样本用于此任务但是通过带有handleMessage的线程
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.widget.EditText;
import android.widget.TextView;
public class l15_threadOneaacto extends Activity {
/** Called when the activity is first created. */
TextView tv[]=new TextView[4];
EditText et;
Thread bcko;
static int index=0;
boolean isRunning=false;
boolean acceptevent=false;
Handler hn=new Handler(){
@Override
public void handleMessage(android.os.Message msg) {
switch (index) {
case 0: tv[0].setBackgroundColor(Color.BLUE); break;
case 1: tv[0].setBackgroundColor(Color.WHITE); break;
case 2: tv[1].setBackgroundColor(Color.BLUE); break;
case 3: tv[1].setBackgroundColor(Color.WHITE); break;
case 4: tv[2].setBackgroundColor(Color.BLUE); break;
case 5: tv[2].setBackgroundColor(Color.WHITE); break;
case 6: tv[3].setBackgroundColor(Color.BLUE); break;
case 7: tv[3].setBackgroundColor(Color.WHITE); break;
}
index++;
if(index==8){
acceptevent=true;
et=(EditText)findViewById(R.id.bbb);
et.setText("ready for input");
}
};
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv[0]=(TextView)findViewById(R.id.tx1);
tv[1]=(TextView)findViewById(R.id.tx2);
tv[2]=(TextView)findViewById(R.id.tx3);
tv[3]=(TextView)findViewById(R.id.tx4);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
bcko=new Thread (new Runnable() {
@Override
public void run() {
try {
//
for(int i=0;i<8 && isRunning;i++){
Thread.sleep(2000);
hn.sendMessage(hn.obtainMessage());
}
} catch (Exception e) {
// TODO: handle exception
}
}
});
isRunning=true;
bcko.start();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
isRunning=false;
}
}
kayout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/tx1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFFFF"
android:text=""
/>
<TextView
android:id="@+id/tx2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFFFF"
android:text=""
/>
<TextView
android:id="@+id/tx3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFFFF"
android:text=""
/>
<TextView
android:id="@+id/tx4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFFFF"
android:text=""
/>
<EditText
android:id="@+id/bbb"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="not ready "
/>
</LinearLayout>
祝你好运,