在GridView中混合使用ImageView和VideoView

3
我有一些链接,它们既可以是图片也可以是视频。我想在GridView(2*2)中将它们混合在一起展示。因此,在构建适配器时,如何根据url实例化它,以显示ImageView或VideoView?
之前的实现只使用了一个布局,其中ImageView用于显示图片和视频,并使用clickListeners启动另一个活动来播放视频。所有的视频都使用默认图像作为占位符,这看起来很丑。
我只想在2*2的网格中显示图片,如果url是视频,则显示第一帧,就像Instagram一样。
1个回答

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类型并设置其中一个,并将另一个设置为不可见。
    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:我使用了Picasso来设置ImageView。

PS2:在Instagram中,我们可以通过使用Instagram API获取视频帖子的图像。同时,我们有mediaType标志来确定它是视频还是图像。您可以从这里检查Instagram API。我开发了一个Instagram转发应用程序。在gridView中,我正在使用来自视频帖子API的图像。单击视频项时,我也会启动新的活动来播放视频。但是,如果您确实需要捕获视频的一帧,请查看此条目


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接