写一个自定义控件可以支持图片预览和mp4预览,点击可以打开的代码
时间: 2024-02-12 19:02:53 浏览: 17
好的,以下是一个自定义控件的示例代码,它可以支持图片预览和 mp4 预览,并且在点击时可以打开:
```
public class PreviewView extends FrameLayout implements OnClickListener {
private ImageView mImageView;
private VideoView mVideoView;
public PreviewView(Context context) {
super(context);
init();
}
public PreviewView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PreviewView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
LayoutInflater.from(getContext()).inflate(R.layout.preview_view, this);
mImageView = findViewById(R.id.image_view);
mVideoView = findViewById(R.id.video_view);
setOnClickListener(this);
}
public void setImagePreview(String imagePath) {
mImageView.setVisibility(VISIBLE);
mVideoView.setVisibility(GONE);
Glide.with(getContext()).load(imagePath).into(mImageView);
}
public void setVideoPreview(String videoPath) {
mImageView.setVisibility(GONE);
mVideoView.setVisibility(VISIBLE);
mVideoView.setVideoPath(videoPath);
}
@Override
public void onClick(View v) {
if (mVideoView.getVisibility() == VISIBLE) {
mVideoView.start();
} else {
// 打开图片
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + imagePath), "image/*");
getContext().startActivity(intent);
}
}
}
```
在上述代码中,我们使用了 FrameLayout 作为容器,并在其中包含了一个 ImageView 和一个 VideoView,分别用于显示图片和视频。我们还实现了两个方法 setImagePreview() 和 setVideoPreview(),用于设置图片和视频的预览图像,以及一个 onClick() 方法,用于处理点击事件。在 onClick() 方法中,我们检查当前显示的是否是视频,如果是则播放视频,否则打开图片。