android仿微信发布动态功能,Android仿微信朋友圈发布动态功能
一、前言
应工作上的要求,需要有一个类似于微信朋友圈发动态上传图片的功能,想起曾经已经做过了,但奈何不忍看自己以前写的代码的惨状,觉得重新封装一个使用方便,易于维护的类似功能的类,自己之后用起来也顺手,当然也方便一下大家,这样可以加快我们工作的效率,让我们有更多的时间学习(划水)。
功能上的话,目前有添加图片、查看大图、删除图片
二、效果图
先贴一下效果图吧
三、实现功能
库有用到butterknife和显示图片的glide
适配器用的rvadapter,加一个删除功能的气泡弹窗
引入一下相关依赖:
api 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
implementation 'com.github.bumptech.glide:glide:4.5.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'
//气泡弹窗
implementation 'me.kareluo.ui:popmenu:1.1.0'
implementation 'com.zhy:base-rvadapter:3.0.3'
复制代码
####(一)布局文件
主页面上的话,只有一个RecyclerView,他的LayoutManager设为GridLayoutManager,一行为3个
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:id="@+id/rv_images"
android:paddingTop="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
复制代码
子布局的话,有两个ImageView,一个是普通的图片,另外一个固定为那个添加的按钮
android:layout_width="match_parent"
android:layout_height="90dp"
android:gravity="center"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
android:id="@+id/iv_thum"
android:visibility="gone"
android:scaleType="centerCrop"
android:layout_width="90dp"
android:layout_height="match_parent" />
android:visibility="gone"
android:id="@+id/iv_add"
android:src="@mipmap/add_icon"
android:scaleType="centerCrop"
android:layout_width="90dp"
android:layout_height="match_parent" />
复制代码
(二)Activity代码
先来看一下如何在我们的页面里使用我已经写好的这个adapter
首先初始化一下控件和adapter,给adapter设置一个点击添加图片的监听
private void initView() {
rvImages.setLayoutManager(new GridLayoutManager(this, 3));
adapter = new NineGridAdapter(MainActivity.this, mSelectList, rvImages);
adapter.setMaxSize(maxNum);
rvImages.setAdapter(adapter);
adapter.setOnAddPicturesListener(new OnAddPicturesListener() {
@Override
public void onAdd() {
pickImage();
}
});
}
复制代码
选择图片页面的启动
private void pickImage() {
MultiImageSelector selector = MultiImageSelector.create(context);
selector.showCamera(true);
selector.count(maxNum);
selector.multi();
selector.origin(mSelectList);
selector.start(instans, REQUEST_IMAGE);
}
复制代码
拿到选择图片页面的返回数据,添加至List中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE) {
if (resultCode == RESULT_OK) {
List select = data.getStringArrayListExtra(MultiImageSelector.EXTRA_RESULT);
mSelectList.clear();
mSelectList.addAll(select);
adapter.notifyDataSetChanged();
}
}
}
复制代码
(三)适配器代码
首先在构造函数中,往list里添加一个空串,为添加按钮占位。之后初始化一下删除气泡按钮跟大图显示的控件
public NineGridAdapter(Context context, List selectPath, RecyclerView rvImages) {
super(context, R.layout.item_img, selectPath);
this.context = context;
selectPath.add("");
initDeleteMenu();
initTransfer(rvImages);
}
复制代码
两个控件初始化的代码
/**
* 初始化大图查看控件
*/
private void initTransfer(RecyclerView rvImages) {
transferee = Transferee.getDefault(context);
config = TransferConfig.build()
.setSourceImageList(getDatas())
.setProgressIndicator(new ProgressBarIndicator())
.setIndexIndicator(new NumberIndexIndicator())
.setImageLoader(GlideImageLoader.with(context.getApplicationContext()))
.setJustLoadHitImage(true)
.bindRecyclerView(rvImages, R.id.iv_thum);
}
/**
* 初始化图片删除小弹窗
*/
private void initDeleteMenu() {
menuView = new PopupMenuView(context, R.menu.menu_pop, new MenuBuilder(context));
menuView.setSites(PopupView.SITE_TOP);
menuView.setOnMenuClickListener(new OptionMenuView.OnOptionMenuClickListener() {
@Override
public boolean onOptionMenuClick(int position, OptionMenu menu) {
getDatas().remove(deletePosition);
if (!getDatas().get(getDatas().size() - 1).equals("")) {
//列表最后一张不是添加按钮时,加入添加按钮
getDatas().add("");
}
notifyDataSetChanged();
return true;
}
});
}
复制代码
在item填充的函数中完成图片的显示,点击和长按的监听
@Override
protected void convert(ViewHolder viewHolder, String item, final int position) {
ImageView ivThum = viewHolder.getView(R.id.iv_thum);
ImageView ivAdd = viewHolder.getView(R.id.iv_add);
if (item.equals("")) {
//item为添加按钮
ivThum.setVisibility(View.GONE);
ivAdd.setVisibility(View.VISIBLE);
} else {
//item为普通图片
ivThum.setVisibility(View.VISIBLE);
ivAdd.setVisibility(View.GONE);
}
Glide.with(mContext).load(item).into(ivThum);
ivThum.setOnClickListener(new PicturesClickListener(position));
ivAdd.setOnClickListener(new PicturesClickListener(position));
ivThum.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
deletePosition = position;
//最上面的三个删除按钮是往下的 其他的都是往上的
if (position < 3) {
menuView.setSites(PopupView.SITE_BOTTOM);
} else {
menuView.setSites(PopupView.SITE_TOP);
}
menuView.show(view);
return false;
}
});
}
复制代码
点击事件代码
private class PicturesClickListener implements View.OnClickListener {
int position;
public PicturesClickListener(int position) {
this.position = position;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.iv_thum:
//点击图片
config.setNowThumbnailIndex(position);
config.setSourceImageList(getDatas());
transferee.apply(config).show();
break;
case R.id.iv_add:
//点击添加按钮
if (listener != null)
listener.onAdd();
break;
}
}
}
复制代码
#四、关于老v7项目的问题
前段时间也是刚把自己的项目从v7手动改为androidx的,忙活了半天,后来发现android studio有一键将v7项目改为新的androidx的项目,算是给自己记个笔记
有问题和建议都可以在评论区给我留言哦
android仿微信发布动态功能,Android仿微信朋友圈发布动态功能相关推荐
- Android实现仿微信朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)
原址: http://blog.csdn.net/zhang3776813/article/details/52092591 /*** 仿微信朋友圈发布动态* 拍照或图库选择 * 压缩图片并保存**/ ...
- Android实现仿微信朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)附源码
原创作品,转载请注明出处:http://blog.csdn.net/zhang3776813/article/details/52092591 最近项目需求中要用到类似微信朋友圈发布 ...
- php mysql仿微信朋友圈评论表设计_PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)...
我们大部分人都发过动态,想必都知道发动态.回复评论.删除动态的整个过程,那么作为初学者,要模仿这些功能有点复杂的,最起码表的关系得弄清楚~~ 先把思路理一下: (1)用户登录,用session读取当前 ...
- php 朋友圈留言,php实例-PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)...
我们大部分人都发过动态,想必都知道发动态.回复评论.删除动态的整个过程,那么这个功能是如何实现的呢?下面小编给大家带来了实例代码,对PHP仿qq空间或朋友圈发布动态.评论动态.回复评论.删除动态或评论 ...
- 小程序动态class_微盛小程序“圈子动态”来了!仿朋友圈发布动态,引流拓客神器...
微盛小程序"圈子动态",是一款和微信朋友圈有着相似功能,支持用户动态发布.帖子分享.点赞.评论等,能够集合小程序用户于一个圈子,给他们提供分享商品.交流沟通的平台,帮助商家提高客户 ...
- android朋友圈动态视频,安卓版微信7.0.5尝鲜,朋友圈可发30秒视频,网友最爱的功能是?...
原标题:安卓版微信7.0.5尝鲜,朋友圈可发30秒视频,网友最爱的功能是? 微信现在已经是成为人们每天最常使用的聊天工具之一,因此微信的每一次更新和变化都会引起人们的注意.这不,安卓版的微信又悄悄推出 ...
- Flutter高仿微信-第16篇-朋友圈-发布作品(图片)
Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 实现 ...
- iphone android 朋友圈,最近很火的微信空白朋友圈发布教程!安卓、苹果通用!
原标题:最近很火的微信空白朋友圈发布教程!安卓.苹果通用! 各位小伙伴,晚上好啊!已经一个月没有更新了,这篇文章几天之前就要推送了,一直拖到现在,真是名副其实的"拖更王". 微信作 ...
- android微信朋友圈视频无法播放,微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?...
微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?最近微信更新,用户可以进行分享自己手机里的视频,这一举措受到很多人的喜欢.那么微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频 ...
最新文章
- HTML样式offset[Direction] 和 style.[direction]的区别
- java异常怎么输出到页面_怎么把抛出的异常信息输出到SWING 界面上
- Android 使用 ActivityResult 处理 Activity 之间的数据通信及调起拍照实例
- win7 x64 系统无故卡死 360惹的祸 搞了我大半年
- Doug Cutting—访谈录
- 搜索引擎设计实用教程(3)-以百度为例
- 两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍
- 全网都在用的超全【面试刷题小程序】,最新版激活教程
- 程序员的压力有多大?
- 如何进行可视化大屏视觉设计?
- 中职计算机优质课课件ppt,中职优质课 交集课件.ppt
- bbsmax mysql_mysql 常用,使用经验
- 睡眠时间 数据_我测试了Apple Watch睡眠追踪以节省您的时间和电池寿命
- 请求服务器获取微信openid,Golang通过小程序获取微信openid的方法示例
- SLM2110 600V 2A 逆变电源专用芯片替代IR2110S 移动储能解决方案
- 如何免费使用jrebel 和eclipse 项目配合完成热部署功能
- matlab导入数据画二维云图,matlab中用xyz三组数据画出2维云图
- Beyond Compare实现Class文件对比
- Win10 新版Edge浏览器Flash Player不兼容,总是显示flash与地区不兼容(完美解决)
- 小学一年级计算机社团计划,小学科技兴趣小组活动计划
热门文章
- 浅谈vue双向绑定原理
- 计算机毕业设计源代码java项目开发实例ssm+mysql实现简单的物流快递管理系统[包运行成功]
- 2014年TI杯邀请赛——简易高速差分探头 题目解析
- 【运筹学】匈牙利法 ( 匈牙利法步骤 | 第一步 : 使行列出现 0 元素示例 )
- 【产品宣传广告片制作软件】Focusky教程 | 前景设置功能
- matlab fir stm32,求一个完整的STM32运算FIR滤波程序
- JS 对象属性的两种表示方法
- OSPF及一类LSA、二类LSA
- oracle汉字默认排序,oracle对汉字排序
- 电脑连接不上网络(梯子原因)