【问题标题】:setVisibility only works once on ImageViewsetVisibility 仅在 ImageView 上有效一次
【发布时间】:2012-10-27 15:06:07
【问题描述】:

我正在尝试使 GridView 中的视图变得不可见和可见。我第一次调用 INVISIBLE AND VISIBLE 时可以使其工作,但随后的尝试不起作用。

  private void flashImageSeq(){
    int i = 0;
    while (i < 9){
        animate(i);         
        ++i;
    }
}

private void startThread() {
  t = new Thread() {
    public void run () {
       try {
        sleep(500);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }
  };

  t.start();
}

private void animate(int position){
    gridview.findViewById(R.id.gridview);
  // imgView is defined in View getView for Adapter code not shown
    ImageView imgView = (ImageView)gridview.getChildAt(position);
    imgView.setVisibility(ImageView.INVISIBLE);
  startThread();
  imgView.setVisibility(ImageView.VISIBLE);
}

第二次调用 flashImageSeq() 不起作用

【问题讨论】:

    标签: android gridview view imageview


    【解决方案1】:

    试试

    private void flashImageSeq(){
    int i = 0;
    while (i < 9){
        animate(i);         
        ++i;
    }
    }
    
    private void startThread(final ImageView im) {
      t = new Thread() {
        public void run () {
           try {
            sleep(500);
            yourActivity.this.runOnUiThread(new Runnable() {
    
                public void run() {
    
                im.setVisibility(ImageView.VISIBLE);
    
                }
            });
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
      };
    
      t.start();
    }
    
    private void animate(int position){
        gridview.findViewById(R.id.gridview);
      // imgView is defined in View getView for Adapter code not shown
        ImageView imgView = (ImageView)gridview.getChildAt(position);
        imgView.setVisibility(ImageView.INVISIBLE);
      startThread();
    
    }
    

    【讨论】:

      【解决方案2】:

      您正在创建一个休眠 500 毫秒的新线程,但您的两个 setVisibility 调用发生在一毫秒内。

      您应该使用Thread.sleep(500) 来实际暂停主线程,但这是非常糟糕的做法!

      最好创建一个运行循环的线程,并确保使用“runOnUIThread”执行 setVisi 调用,因为其他答案显示它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多