我有一个使用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();
}
}
答案 0 :(得分:1)
这与焦点无关。您绝不能从UI线程以外的其他线程触摸UI小部件。而且也不例外。 runOnUiThread()
应该像你猜到的那样成为解决方案,但是当你没有显示任何代码时,你就很难说出你在那里做错了什么。