Android选择与上传图片之Matisse教程

Android选择与上传图片之Matisse教程

2023年7月7日发(作者:)

Android选择与上传图⽚之Matisse教程效果图:就⽬前效果图来看,好像也没什么⽑病哈,其实我这个集成的过程是有点坎坷的。

⽽且,功能也不算是很齐全吧…主要体现在以下⼏个点没有回调之后的预览选择之后不能删除已选已选择的图⽚再次选择不能带过去剪裁压缩权限Glide版本过低但是,也是有特点的MD风格⽩天模式和夜间模式其他与同类相⽐也真的没什么了,唯⼀背书 就是知乎团队出的呗。。

相⽐之下,昨天出的就更加友好和⼈性化了。下⾯来说说集成遇到的问题以及解决⽅案。集成Gradle:repositories { jcenter()}dependencies { compile 'd:matisse:0.4.3'}releases最新是v0.5.0-beta3的,本⽂还是基于官⽅⽂档0.4.3的版本你以为这样就可以使⽤了吗,nonono,权限需要动态获取,你还需要RxPermissions或者其他权限库,或者⾃⼰封装compile 'issions2:rxpermissions:0.9.5@aar'这就完了吗,no,你还需要rxjavacompile "2:rxjava:2.1.9"现在总可以了吧,依然nonono,如果你项⽬集成了,还是会报错,我在⽤的Glide版本是4.6.1的,Matisse中集成的是3.7.0的,是有区别的,具体你可以看这⾥ ,你也可以⽤。会报异常MethodError: 解决⽅案就是重新⾃定义图⽚加载⽅式GlideEngine,具体可以看这⾥到这⾥你以为就ok了吗,还是nonono,还是会报异常,因为两个版本会冲突啊sDefFoundError: orCompatHelper解决⽅案看这⾥ Matisse:爱我你怕了吗终于可以使⽤了,哇的哭出声使⽤你以为集成都这么坎坷了,使⽤应该很⽅便吧,no啊⼤胸弟,虽然集成之前我看到150+的Issues有点头⽪发⿇,果然没让我失望,坎坷的路还长着呢。最快的⽅式集成第三⽅有两种,1.看官⽅⽂档,2.看例⼦。你以为从sample中copy copy代码,导下包就能跑起来了吗,nonono选择器不光是有图⽚的吧,你可能还有gif和视频啊,所以在配置的时候你要选择⼀个type啊sample是这样的() .choose((), false) ...源码实际上是这样的 public SelectionSpecBuilder choose(Set mimeType) { return new SelectionSpecBuilder(this, mimeType); }所以,你的应该是这样() .choose(()) ...没有boolean类型参数,⽽且也不是ofAll了,⽽是allOf。上⾯是把所有的都列出来,那我如果只选图⽚怎么办呢sample是这样的() .choose(e()) ...尼玛。。实际上MimeType这个枚举类中根本就没有ofImage所以你的应该是这样的() .choose(()) ...所以,刺不刺激?对了,你如果要⽤最新版本,⽐如v0.5.0-beta3,注意去掉前⾯的v。然后,你可以跑起来了,也不会报错了,仿佛⼀切都ok的样⼦(翻译⼀下:其实并没有,逃..)遇到⼏个点还没有解决,也懒得深⼊研究了,我要回家过年,哼1. 拍照还是选择相册,没有处理2. 预览,选择图⽚的时候可以预览,但是回调之后并不⾏,没有处理3. onActivityResult回调之后的图⽚不能直接删除,没有处理4. 剪裁,没有处理5. 压缩,没有处理6. 哦对了,如果可以预览了,那还得可以保存图⽚呢,也没有处理,因为预览没有处理,哈哈哈嗝7. 已选择的图⽚,再次选择的时候带过去,没有处理那有⼈就会说了,这么多没有的功能,或者⽂档没有介绍到的,不是可以⾃⼰去处理吗,这样岂不是定制化更⾼?⽐如筛选条件、主题…emmm…你说的对,但我不认同。哈哈哈哦对了,选择图⽚的时候可以预览,看⼀下是什么样的啊。。scaleType不对就不说了,可是你让我的toolbar兄弟如何⾃处?⼜要挨window爸爸的打了。。哦对了,0.5的版本加了新功能,但是正式版还没有发布最后,不要忘了加权限和FileProvider。然后贴⼀下MainActivity的代码和gayhub的地址package edemo;import st;import ;import tyInfo;import ;import ;import patActivity;import youtManager;import erView;import Inflater;import ;import oup;import iew;import ;import ;import issions;import e;import pe;import eStrategy;import ;import er;import able;public class MainActivity extends AppCompatActivity implements kListener { private UriAdapter mAdapter; private static final int REQUEST_CODE_CHOOSE = 23; @Override protected void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(ty_main); findViewById().setOnClickListener(this); findViewById(a).setOnClickListener(this); RecyclerView recyclerView = (RecyclerView) findViewById(erview); outManager(new GridLayoutManager(this, 3)); pter(mAdapter = new UriAdapter()); } /** * 1 预览 2 已选择带过去 3 剪裁 4 压缩 *

* 120 显⽰三列 100显⽰四列 */ @Override public void onClick(final View v) { RxPermissions rxPermissions = new RxPermissions(); t(_EXTERNAL_STORAGE) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Boolean aBoolean) { if (aBoolean) { switch (()) { case : () .choose(())//ofAll() .theme(e_Zhihu)//主题,夜间模式e_Dracula .countable(true)//是否显⽰选中数字 .capture(true)//是否提供拍照功能 .captureStrategy(new CaptureStrategy(true, "ovider"))//存储地址 .maxSelectable(9)//最⼤选择数 //.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))//筛选条件 .gridExpectedSize(getResources().getDimensionPixelSize(_expected_size))//图⽚⼤⼩ .restrictOrientation(_ORIENTATION_PORTRAIT)//屏幕⽅向 .thumbnailScale(0.85f)//缩放⽐例 .imageEngine(new MyGlideEngine())//图⽚加载⽅式 .forResult(REQUEST_CODE_CHOOSE);//请求码 break; case a: () .choose(())//ofImage() .theme(e_Dracula) .countable(false) .maxSelectable(9) .imageEngine(new MyGlideEngine()) .forResult(REQUEST_CODE_CHOOSE); break; } a(null); } else { xt(, "权限被拒绝了..", _LONG).show(); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { vityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { a(Result(data)); } } private class UriAdapter extends r { private List mUris; void setData(List uris) { mUris = uris; notifyDataSetChanged(); } @Override public UriViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new UriViewHolder((text()).inflate(_item, parent, false)); } @Override public void onBindViewHolder(UriViewHolder holder, int position) { ().load((position)).into(); } @Override public int getItemCount() { return mUris == null ? 0 : (); } class UriViewHolder extends lder { private ImageView mImg; UriViewHolder(View contentView) { super(contentView); mImg = (ImageView) ewById(); } } }}到此这篇关于Android选择与上传图⽚之Matisse教程的⽂章就介绍到这了,更多相关Android图⽚选择上传Matisse内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688677814a161787.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信