android:动态刷新imageview
我有一个关于imageview刷新的问题。基本上,我有一个按钮和一个骰子。我希望骰子旋转几次(模拟掷骰子)-0.5秒,最后停止。问题是:我只能看到最后的结果。正在进行骰子滚动模拟,但未显示更改(未刷新imageview)。我认为这是我对应该如何实施的错误理解 我在一个简单的项目中隔离了这个问题,几行代码,您可以在这里下载(如果您有时间玩的话): 整个代码如下所示:android:动态刷新imageview,android,multithreading,imageview,refresh,runnable,Android,Multithreading,Imageview,Refresh,Runnable,我有一个关于imageview刷新的问题。基本上,我有一个按钮和一个骰子。我希望骰子旋转几次(模拟掷骰子)-0.5秒,最后停止。问题是:我只能看到最后的结果。正在进行骰子滚动模拟,但未显示更改(未刷新imageview)。我认为这是我对应该如何实施的错误理解 我在一个简单的项目中隔离了这个问题,几行代码,您可以在这里下载(如果您有时间玩的话): 整个代码如下所示: package com.viscode.vrtiKocku; 导入java.util.Random; 导入android.app.
package com.viscode.vrtiKocku;
导入java.util.Random;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Handler;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
公共类VrtiKockuActivity扩展活动{
/**在首次创建活动时调用*/
私有最终处理程序mHandler=新处理程序();
Random randomGenerator=新的Random();
私有图像视图1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dice1=(ImageView)findViewById(R.id.imageView1);
mHandler.post(mRollDice);
}
private final Runnable mRollDice=new Runnable(){
公开募捐{
Button buttonRollDice=(Button)findViewById(R.id.buttonRollDice);
buttonRollDice.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
整数rand,rollSimulationTimeLimit=500,rollDuration=100;;
//模拟掷骰子500毫秒,100毫秒时掷5次骰子
而(rollDuration
使用处理程序的postDelayed而不是线程
package com.viscode.vrtiKocku;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class VrtiKockuActivity extends Activity {
/** Called when the activity is first created. */
private final Handler mHandler = new Handler(); // handler
Random randomGenerator = new Random(); // varijabla tipa random
Boolean kocka1pritisnuta = false; // da li je kocka zakljucana ili ne
Integer vkocka1; // drzi vrijednost kocke
private ImageView kocka1; // varijabla imageview-a
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
kocka1 = (ImageView) findViewById(R.id.imageView1); // inicijalizira
// imageview
mHandler.post(mBacaj); // pokrece handler
}
private final Runnable mBacaj = new Runnable() {
public void run() {
Button buttonBacaj = (Button) findViewById(R.id.buttonBacaj); // veze
// button
// za
// varijablu
buttonBacaj.setOnClickListener(new View.OnClickListener() { // postavlja
// listener
// na
// dugme
public void onClick(View v) { // definise click event
// TODO Auto-generated method stub
Integer rand; // varijabla koja drzi rand broj
vrtiKocke(); // pokreni VRCENJE KOCKI
if (!kocka1pritisnuta) { // ako kocka nije
// zakljucana...
rand = randomGenerator.nextInt(6) + 1; // generisi
// random
// broj
vkocka1 = rand; // zapamti vrijednost da mozes
// racunat poslije
postaviKocku(rand, kocka1,0); // postavi sliku
// kocke koja
// odgovara
// vrijednosti
}
}
});
final ImageView kocka1 = (ImageView) findViewById(R.id.imageView1); // povezi
// imageview
// sa
// kockom
kocka1.setOnClickListener(new View.OnClickListener() { // postavi
// listener
// na kocku
public void onClick(View v) { // definisi click event za kocku
kocka1pritisnuta = pritisniKocku(kocka1pritisnuta, kocka1); // izvrsi
// click
// event
// za
// kocku
}
});
}
};
// ova procedura treba da vrti kocke do 500 milisekundi, trajanje je po 100
// ms, znaci 5x se trabaju okrenuti
private void vrtiKocke() {
Integer rand, limit = 1000, trajanje = 200;
while (trajanje < limit) {
if (!kocka1pritisnuta) {
rand = randomGenerator.nextInt(6) + 1;
postaviKocku(rand, kocka1, trajanje);
}
rand = randomGenerator.nextInt(100);
// cekaj vrijeme trajanja
trajanje += trajanje;
}
}
// ova procedura postavlja vrijednost kocke na onu vrijednost broja koji je
// dobiven
private void postaviKocku(final Integer rand, final ImageView kocka, Integer trajanje) {
//Log.i("kocka", rand+"");
switch (rand) {
case 1:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.one_red));
}
}, trajanje);
break;
case 2:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.two_red));
}
}, trajanje);
break;
case 3:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.three_red));
}
}, trajanje);
break;
case 4:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.four_red));
}
}, trajanje);
break;
case 5:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.five_red));
}
}, trajanje);
break;
case 6:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.six_red));
}
}, trajanje);
break;
default:
break;
}
}
// ova procedura samo zakljucava ili otkljucava kocku
private boolean pritisniKocku(boolean kockapritisnuta, ImageView kocka) {
if (!kockapritisnuta) {
kocka.setAlpha(128);
} else
kocka.setAlpha(255);
return !kockapritisnuta;
}
}
package com.viscode.vrtiKocku;
导入java.util.Random;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Handler;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
公共类VrtiKockuActivity扩展活动{
/**在首次创建活动时调用*/
私有最终处理程序mHandler=新处理程序();//处理程序
Random randomGenerator=new Random();//varijabla tipa Random
布尔值kocka1pritisnuta=false;//dali je kocka zakljucana iline
整数vkocka1;//drzi vrijednost kocke
私有ImageView kocka1;//varijabla ImageView-a
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
kocka1=(ImageView)findViewById(R.id.imageView1);//inicijalizira
//图像视图
mHandler.post(mBacaj);//pokrece handler
}
私有最终可运行mBacaj=新可运行(){
公开募捐{
Button ButtonBaaj=(Button)findViewById(R.id.ButtonBaaj);//veze
//钮扣
//za
//瓦里贾布鲁
ButtonBaaj.setOnClickListener(新视图.OnClickListener(){//postavlja
//听众
//na
//达格米
公共void onClick(视图v){//定义单击事件
//TODO自动生成的方法存根
整数兰德;//varijabla koja drzi rand broj
vrtiKocke();//pokreni VRCENJE KOCKI
如果(!kocka1pritisnuta){//ako kocka nije
//扎克尔朱卡纳。。。
rand=randomGenerator.nextInt(6)+1;//generisi
//随机的
package com.viscode.vrtiKocku;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class VrtiKockuActivity extends Activity {
/** Called when the activity is first created. */
private final Handler mHandler = new Handler(); // handler
Random randomGenerator = new Random(); // varijabla tipa random
Boolean kocka1pritisnuta = false; // da li je kocka zakljucana ili ne
Integer vkocka1; // drzi vrijednost kocke
private ImageView kocka1; // varijabla imageview-a
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
kocka1 = (ImageView) findViewById(R.id.imageView1); // inicijalizira
// imageview
mHandler.post(mBacaj); // pokrece handler
}
private final Runnable mBacaj = new Runnable() {
public void run() {
Button buttonBacaj = (Button) findViewById(R.id.buttonBacaj); // veze
// button
// za
// varijablu
buttonBacaj.setOnClickListener(new View.OnClickListener() { // postavlja
// listener
// na
// dugme
public void onClick(View v) { // definise click event
// TODO Auto-generated method stub
Integer rand; // varijabla koja drzi rand broj
vrtiKocke(); // pokreni VRCENJE KOCKI
if (!kocka1pritisnuta) { // ako kocka nije
// zakljucana...
rand = randomGenerator.nextInt(6) + 1; // generisi
// random
// broj
vkocka1 = rand; // zapamti vrijednost da mozes
// racunat poslije
postaviKocku(rand, kocka1,0); // postavi sliku
// kocke koja
// odgovara
// vrijednosti
}
}
});
final ImageView kocka1 = (ImageView) findViewById(R.id.imageView1); // povezi
// imageview
// sa
// kockom
kocka1.setOnClickListener(new View.OnClickListener() { // postavi
// listener
// na kocku
public void onClick(View v) { // definisi click event za kocku
kocka1pritisnuta = pritisniKocku(kocka1pritisnuta, kocka1); // izvrsi
// click
// event
// za
// kocku
}
});
}
};
// ova procedura treba da vrti kocke do 500 milisekundi, trajanje je po 100
// ms, znaci 5x se trabaju okrenuti
private void vrtiKocke() {
Integer rand, limit = 1000, trajanje = 200;
while (trajanje < limit) {
if (!kocka1pritisnuta) {
rand = randomGenerator.nextInt(6) + 1;
postaviKocku(rand, kocka1, trajanje);
}
rand = randomGenerator.nextInt(100);
// cekaj vrijeme trajanja
trajanje += trajanje;
}
}
// ova procedura postavlja vrijednost kocke na onu vrijednost broja koji je
// dobiven
private void postaviKocku(final Integer rand, final ImageView kocka, Integer trajanje) {
//Log.i("kocka", rand+"");
switch (rand) {
case 1:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.one_red));
}
}, trajanje);
break;
case 2:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.two_red));
}
}, trajanje);
break;
case 3:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.three_red));
}
}, trajanje);
break;
case 4:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.four_red));
}
}, trajanje);
break;
case 5:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.five_red));
}
}, trajanje);
break;
case 6:
mHandler.postDelayed(new Runnable() {
public void run() {
Log.i("kocka", rand+"");
kocka.setImageDrawable(getResources().getDrawable(R.drawable.six_red));
}
}, trajanje);
break;
default:
break;
}
}
// ova procedura samo zakljucava ili otkljucava kocku
private boolean pritisniKocku(boolean kockapritisnuta, ImageView kocka) {
if (!kockapritisnuta) {
kocka.setAlpha(128);
} else
kocka.setAlpha(255);
return !kockapritisnuta;
}
}