怎么不失去焦点?

时间:2017-02-14 00:37:09

标签: java android

我有一个使用library和他ImageView的视频播放器,即覆盖30%视频播放器的横幅类型。每隔15秒,图片就会改变。

mBannerView.setImageBitmap (BitmapFactory.decodeFile (file.getAbsolutePath ()));
Thread.sleep (1000 * 15);

但是在使用以下消息更改图片时发生了崩溃:

  

Android“只有创建视图层次结构的原始线程才可以   触摸它的视图。 “

我尝试将这些行写到UI stream:

runOnUiThread (new Runnable () {
        @Override
        public void run () {
            ............
        }
    });

ImageView然后不响应任何计时器或更改。

我现在想(也许是错的,在这种情况下,请更正),视频播放时焦点在于视频播放器,因此上面的图片会发生变化,崩溃。

如果是这样,在这种情况下, 如何在ImageView播放视频的同时不要失去焦点? 如果不是,那可能是什么错误?

UPD:代码:

 public void bannerSlide(boolean run) {
        Timer timer = new Timer();
        File file;
        if (run){
            mBannerView.setVisibility(View.VISIBLE);
            final List<Banner> bannerList = GlobalData.loadBannerInfo(MainActivity.this);
            if (bannerList != null && bannerList.size() > 0){
                for (int i = 0; i < bannerList.size(); i++){
                    file = new File(Application.banner_path + bannerList.get(i).getName());
                    if (file.exists()){
                        mBannerView.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath()));
                    }

                    final int finalI = i;
                    timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            if (finalI == bannerList.size() - 1){
                                bannerSlide(true);
                            }
                        }
                    }, 15 * 1000);
                }
            } else {
                mBannerView.setVisibility(View.GONE);
            }
        } else {
            mBannerView.setVisibility(View.GONE);
            timer.cancel();
        }
    }

1 个答案:

答案 0 :(得分:1)

这与焦点无关。您绝不能从UI线程以外的其他线程触摸UI小部件。而且也不例外。 runOnUiThread()应该像你猜到的那样成为解决方案,但是当你没有显示任何代码时,你就很难说出你在那里做错了什么。

相关问题