android matisse按钮调用,GitHub - yueshaolong/Matisse-Android10: 修改知乎的demo,增加默认打开指定图片文件夹;增加单独调用拍照功能;适配And...

权限

The library requires two permissions:

android.permission.READ_EXTERNAL_STORAGE

android.permission.WRITE_EXTERNAL_STORAGE

android.permission.CAMERA

使用

指定默认打开的图片文件夹

Matisse.from(SampleActivity.this)

.choose(MimeType.ofImage(), false)

.countable(true)

.capture(true)

.captureStrategy(

//TODO 第一个参数isPublic表示可以存储到公共区域还是沙箱内,是对Android10的适配;在MediaStoreCompat中使用

new CaptureStrategy(true, "com.zhihu.matisse.sample.fileprovider", "preventpro"))

.maxSelectable(9)

.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))

.gridExpectedSize(

getResources().getDimensionPixelSize(R.dimen.grid_expected_size))

.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

.thumbnailScale(0.85f)

.imageEngine(new GlideEngine())

.setOnSelectedListener((uriList, pathList) -> {

Log.e("onSelected", "onSelected: pathList=" + pathList);

})

.showSingleMediaType(true)

.originalEnable(true)

.maxOriginalSize(10)

.autoHideToolbarOnSingleTap(true)

.setOnCheckedListener(isChecked -> {

Log.e("isChecked", "onCheck: isChecked=" + isChecked);

})

.forResult(REQUEST_CODE_CHOOSE);

单独调用拍照功能

Matisse.from(SampleActivity.this)

.choose(MimeType.of(MimeType.JPEG, MimeType.PNG))

.defaultPath(getPictureDirPath().getAbsolutePath())//设置拍照后照片存放的路径

.takePic(true)//设置立即拍照,跳转到系统相机界面

.capture(true)

.captureStrategy(

new CaptureStrategy(true, "com.zhihu.matisse.sample.fileprovider",

//TODO 拍照后照片存得地址:内部存储/Pictures/preventpro;这个名字就是图片要存的文件夹名字

"preventpro"))

.forResult(REQUEST_CODE_TAKE_PHOTO);

其中的CaptureStrategy的第二个参数作者是要和清单文件中的FileProvider中的authorities保持一致。

拍照完成后,记得扫描文件:

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

...

case REQUEST_CODE_TAKE_PHOTO:

//拍照回来,刷新图库

new SingleMediaScanner(this.getApplicationContext(),

getPictureDirPath().getAbsolutePath(),

new SingleMediaScanner.ScanListener() {

@Override public void onScanFinish() {

Log.i("SingleMediaScanner", "scan finish!");

}

});

break;

...

}

}

再次点击时把上次选择的照片带进去,ui自动变为选中状态

其实就是在回调中把选中的list带出来,当再次进去时,就把上次选中的列表重新设置进去。

Matisse.from(SampleActivity.this)

.choose(MimeType.ofImage(), false)

.countable(true)

.capture(true)

.captureStrategy(

//TODO 第一个参数isPublic表示可以存储到公共区域还是沙箱内,是对Android10的适配;在MediaStoreCompat中使用

new CaptureStrategy(true, "com.zhihu.matisse.sample.fileprovider", "preventpro"))

.maxSelectable(9)

.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))

.gridExpectedSize(

getResources().getDimensionPixelSize(R.dimen.grid_expected_size))

.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

.thumbnailScale(0.85f)

.imageEngine(new GlideEngine())

.showSingleMediaType(true)

.originalEnable(true)

.maxOriginalSize(10)

.autoHideToolbarOnSingleTap(true)

.setOnCheckedListener(isChecked -> {

Log.e("isChecked", "onCheck: isChecked=" + isChecked);

})

.defaultPath(getPictureDirPath().getAbsolutePath())//设置默认打开照片的路径

.choiceEnable(false)

.selectItems(selectItems)//传null不回显,传具体列表就会回显,具体看类SampleActivity.java

.forResult(REQUEST_CODE_CHOOSE);

break;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你提供一个简单的Android视频选择相册demo的实现。下面是一个实现的步骤: 1. 在build.gradle文件中添加以下依赖项: ``` dependencies { // ... implementation 'com.github.bumptech.glide:glide:4.11.0' implementation 'com.github.bumptech.glide:okhttp3-integration:4.11.0' implementation 'com.zhihu.android:matisse:0.5.3-beta3' } ``` 2. 创建一个自定义布局文件video_item.xml来显示视频缩略图和标题。例如: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/video_thumbnail" android:layout_width="80dp" android:layout_height="80dp" android:scaleType="centerCrop"/> <TextView android:id="@+id/video_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="16dp" android:textSize="16sp"/> </LinearLayout> ``` 3. 创建一个自定义器类VideoAdapter,用于显示视频缩略图和标题。例如: ``` public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder> { private final List<Video> mVideos; public VideoAdapter(List<Video> videos) { mVideos = videos; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.video_item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Video video = mVideos.get(position); Glide.with(holder.itemView.getContext()) .load(video.getThumbnail()) .into(holder.mThumbnailView); holder.mTitleView.setText(video.getTitle()); } @Override public int getItemCount() { return mVideos.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public final ImageView mThumbnailView; public final TextView mTitleView; public ViewHolder(View view) { super(view); mThumbnailView = (ImageView) view.findViewById(R.id.video_thumbnail); mTitleView = (TextView) view.findViewById(R.id.video_title); } } } ``` 4. 在Activity或Fragment中,使用以下代码来启动视频选择器: ``` Matisse.from(this) .choose(MimeType.ofVideo()) .countable(true) .maxSelectable(9) .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) .thumbnailScale(0.85f) .imageEngine(new GlideEngine()) .forResult(REQUEST_CODE_CHOOSE); ``` 5. 在onActivityResult()方法中,解析视频选择器返回的数据,并将其传递给VideoAdapter来显示。 ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { List<Uri> uris = Matisse.obtainResult(data); List<Video> videos = new ArrayList<>(); for (Uri uri : uris) { videos.add(new Video(uri.toString())); } mVideoAdapter = new VideoAdapter(videos); mRecyclerView.setAdapter(mVideoAdapter); } } ``` 6. 最后,定义一个Video类来保存视频的URI和标题。 ``` public class Video { private final String mUri; private String mTitle; public Video(String uri) { mUri = uri; } public String getUri() { return mUri; } public String getTitle() { return mTitle; } public void setTitle(String title) { mTitle = title; } public String getThumbnail() { // 假设使用Glide从URI中获取视频缩略图 return Glide.with(App.getInstance()) .asBitmap() .load(mUri) .submit() .get(); } } ``` 以上就是一个简单的视频选择相册demo的实现,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值