1

我正在尝试在另一个线程运行时执行不可点击的 ImageView。然后当线程完成时,再次带回 ImageView 可点击。

像这样的东西:

@Override
protected void onCreate(Bundle savedInstanceState) {

   ...    
   imageView.setClickeable(false); // or setEnabled = false

   new Thread(){
      public void run(){
         anotherClass.secondClassMethod();
      }
   }.start();

   imageView.setOnTouchListener(new View.OnTouchListener() {            
      @Override
      public boolean onTouch(View v, MotionEvent event) {
         ...
      }
    });
}


private anotherClassCallback callback = new anotherClassCallback(){

   @Override
   public void hasFinished(){
      imageView.setClickable(true); // or setEnabled = true
   }
};

但它实际上不起作用,因为例如,如果我在线程运行时在 imageView 上单击 3 次,当 hasFinished 方法执行时,它看起来像是保持了我的 3 次单击,然后立即运行了 3 次 onTouch。

有人知道发生了什么吗?

谢谢你!

4

2 回答 2

2

onTouch 和 onClick 不一样,所以当您设置 onClickable 时,仍然会触发假触摸事件。也许尝试在 setOnClickListener() 中做你正在做的事情

于 2013-04-06T10:54:39.257 回答
0

您应该使用 asynctask 而不是线程。正如下面的答案中提到的,您应该使用 setOnclickListener 而不是 setOntouchListener。

new AsyncTask<Void,Void,Void>(){
    onPreExectute(){
         imageView.setClickeable(false);
         imageView.setOnclickListener(null);
    }

    doInBackround(){

    }

    onPostExecute(){
         imageView.setClickeable(true);
         imageView.setOnclickListener(new OnclickListener(){
         onClick(View v){

         }
         });
    }


}.execute();
于 2013-04-06T11:35:36.837 回答