几秒钟后更改的ImageView [英] Change ImageView after few seconds
问题描述
我想实现,可以让用户插入密码简单的活动。 我已经与9图像的gridview的使用和4 imageviews,将选定的图像(在单击项目上的GridView,相应的图像将充满选择的一种)。
现在的问题:我想这4 imageviews作用类似于密码字段:为1秒显示所选择的项目,然后另一个图像... 我试着用asyncthread但我得到了和错误:只有原始的创建一个视图层次可以触摸其观点线程 在这里,我的code:
@覆盖
保护字符串doInBackground(ImageView的... imageViews){
ImageView的passField1 = imageViews [0];
ImageView的passField2 = imageViews [1];
ImageView的passField3 = imageViews [2];
ImageView的passField4 = imageViews [3];
尝试 {
开关(currentField){
情况1:
passField1.setImageResource(//在网格视图中选择recource);
视频下载(1000);
passField1.setImageResource(R.drawable.e00); //这是一个空白图像
打破;
案例2:
passField2.setImageResource(//在网格视图中选择recource);
视频下载(1000);
passField1.setImageResource(R.drawable.e00);
打破;
案例3:
passField3.setImageResource(//在网格视图中选择recource);
视频下载(1000);
passField1.setImageResource(R.drawable.e00);
打破;
壳体4:
passField4.setImageResource(//在网格视图中选择recource);
视频下载(1000);
passField1.setImageResource(R.drawable.e00);
打破;
}
}赶上(InterruptedException异常E){
// TODO自动生成的catch块
e.printStackTrace();
}
返回null;
}
方法1)
让在 doInBackground
线程睡眠,但更改资源在
@覆盖
保护无效onPostExecute(虚空避免){}
在AsyncTask的方法。这种方法有访问UI线程。
方法2)
另一种方式可能是使用
YourActivity.this.runOnUiThread(新的Runnable(){
公共无效的run(){
YourActivity.this.passField1.setImageResource(R.drawable.e00)
}
});
(称为从doInBackground),其中帕斯菲尔德是不是一个局部变量,但类变量。
但方法1为p $ pferred方式$,我建议你试试这种方式第一次。的
I'm trying to implement a simple activity that will let user to insert a password. I've a gridview with the 9 images to use and 4 imageviews that will be the selected images (on clicking on item on gridview, the corresponding image will be filled with the selected one).
Now the problem: I want that the 4 imageviews acts similar to password fields: for 1 seconds appears the selected item and then another image... I tried using asyncthread but I got and error: Only the original thread that created a view hierarchy can touch its views Here my code:
@Override
protected String doInBackground(ImageView... imageViews) {
ImageView passField1 = imageViews[0];
ImageView passField2 = imageViews[1];
ImageView passField3 = imageViews[2];
ImageView passField4 = imageViews[3];
try {
switch (currentField) {
case 1:
passField1.setImageResource(//selected recource on grid view);
Thread.sleep(1000);
passField1.setImageResource(R.drawable.e00); //this is a blank image
break;
case 2:
passField2.setImageResource(//selected recource on grid view);
Thread.sleep(1000);
passField1.setImageResource(R.drawable.e00);
break;
case 3:
passField3.setImageResource(//selected recource on grid view);
Thread.sleep(1000);
passField1.setImageResource(R.drawable.e00);
break;
case 4:
passField4.setImageResource(//selected recource on grid view);
Thread.sleep(1000);
passField1.setImageResource(R.drawable.e00);
break;
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
Approach 1)
Let the thread sleep in doInBackground
, but change the resource in
@Override
protected void onPostExecute(Void aVoid) {}
method of the AsyncTask. This method has access to the UI thread.
Approach 2)
Another way might be to use
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
YourActivity.this.passField1.setImageResource(R.drawable.e00)
}
});
(called from doInBackground) where passfield is not a local variable but class variable.
But approach 1 is the preferred way, I suggest you try that way first.
这篇关于几秒钟后更改的ImageView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!