我有一些可以是图片或视频的网址。我只想在GridView(2 * 2)中将它们混合在一起。因此,在构造适配器时,如何基于URL使用ImageView或VideoView实例化它?
旧的实现只使用了一个既包含图像又包含视频的ImageView的布局,并使用clickListeners启动另一个活动来播放视频。默认图像用作所有视频的占位符,这很丑陋。
我只想显示图片(如果url是图片),以及视频的第一帧,如果它是视频(如Instagram),但在2 * 2网格内。
您可以在网格项目布局上同时使用ImageView和VideoView。
<FrameLayout
android:layout_width="match_parent"
android:layout_height="@dimen/post_image_size">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="@dimen/post_image_size"/>
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="@dimen/post_image_size" />
</FrameLayout>
在adapter#getView()中,应检查URL的类型并设置其中之一,并设置不可见的其他URL。
if (!isVideo(url)) {
videoView.setVisibility(View.GONE);
Picasso.with(this).load(imageUrl)
.into(imageView);
} else {
Uri uri = Uri.parse(url);
videoView.setVideoURI(uri);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
imageView.setVisibility(View.GONE);
videoView.setBackgroundColor(Color.TRANSPARENT);
videoView.requestFocus();
videoView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// start your new activity to play video
return false;
}
});
}
});
}
PS1:我使用毕加索设置ImageView。
PS2:在Instagram中,我们可以使用Instagram API获取视频帖子的图像。另外,我们还有mediaType标志来确定它是视频还是图像。您可以从这里检查Instagram API 。我已经开发了一个instagram repost应用。在gridView中,我使用的是来自视频帖子API的图像。单击视频项目时,我也开始一个新的活动来播放视频。但是,如果您确实需要捕获视频帧,则可以看到此条目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句