最近在工作中用到了评论和赞的功能,在网上搜了一下有类似的Demo,个人觉得不太好用,就稍微的做了一下优化和修改。
这个功能用到了Popwindow,也就是可以自己定义动画的弹出框。
首先是popwindow的布局文件
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="165dp"android:layout_height="35dp"android:layout_gravity="center"android:gravity="center_vertical" ><TextViewandroid:id="@+id/popu_praise"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/zan_left"android:drawableLeft="@drawable/zan"android:text="赞"android:drawablePadding="@dimen/small_space"android:gravity="center_vertical"android:paddingLeft="@dimen/middle_space"android:textColor="#ffffffff"android:textSize="@dimen/smaller_textSize" /><TextViewandroid:id="@+id/popu_cancel"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:drawableLeft="@drawable/zan_left"android:layout_gravity="center_horizontal"android:text="取消"android:drawablePadding="@dimen/small_space"android:gravity="center_vertical"android:paddingLeft="@dimen/middle_space"android:visibility="gone"android:textColor="#ffffffff"android:textSize="16sp" /><LinearLayoutandroid:background="#4d5054"android:layout_marginTop="1px"android:layout_marginBottom="1px"android:layout_width="wrap_content"android:layout_height="match_parent"><Viewandroid:layout_width="0.5dp"android:layout_height="18dp"android:layout_gravity="center_vertical"android:background="#3b3f43" /></LinearLayout><TextViewandroid:id="@+id/popu_comment"android:background="@drawable/zan_right"android:layout_width="0dp"android:layout_height="match_parent"android:drawablePadding="@dimen/small_space"android:gravity="center_vertical"android:paddingLeft="@dimen/middle_space"android:layout_weight="1"android:drawableLeft="@drawable/pinglun"android:text="评论"android:textColor="#ffffffff"android:textSize="@dimen/smaller_textSize" /></LinearLayout></span>
接下来说一下具体实现步骤:
1.自定义继承popwindow,并且实现赞、评论的按钮点击事件....
/***  功能描述:标题按钮上的弹窗(继承自PopupWindow)*/
public class TitlePopup extends PopupWindow {private TextView priase;private TextView comment;private TextView cancel;private Context mContext;// 列表弹窗的间隔protected final int LIST_PADDING = 10;// 实例化一个矩形private Rect mRect = new Rect();// 坐标的位置(x、y)private final int[] mLocation = new int[2];// 屏幕的宽度和高度private int mScreenWidth, mScreenHeight;// 判断是否需要添加或更新列表子类项private boolean mIsDirty;// 位置不在中心private int popupGravity = Gravity.NO_GRAVITY;// 弹窗子类项选中时的监听private OnItemOnClickListener mItemOnClickListener;// 定义弹窗子类项列表private ArrayList<ActionItem> mActionItems = new ArrayList<ActionItem>();public TitlePopup(Context context) {// 设置布局的参数this(context, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);}public TitlePopup(Context context, int width, int height) {this.mContext = context;// 设置可以获得焦点setFocusable(true);// 设置弹窗内可点击setTouchable(true);// 设置弹窗外可点击setOutsideTouchable(true);// 获得屏幕的宽度和高度
//      mScreenWidth = Util.getScreenWidth(mContext);
//      mScreenHeight = Util.getScreenHeight(mContext);// 设置弹窗的宽度和高度setWidth(width);setHeight(height);setBackgroundDrawable(new BitmapDrawable());// 设置弹窗的布局界面View view = LayoutInflater.from(mContext).inflate(R.layout.comment_popu, null);setContentView(view);Log.e("","3333==========" + view.getHeight() + "    " + view.getWidth());priase = (TextView) view.findViewById(R.id.popu_praise);comment = (TextView) view.findViewById(R.id.popu_comment);cancel = (TextView) view.findViewById(R.id.popu_cancel);priase.setOnClickListener(onclick);comment.setOnClickListener(onclick);}/*** 显示弹窗列表界面*/public void show(final View c) {// 获得点击屏幕的位置坐标c.getLocationOnScreen(mLocation);// 设置矩形的大小mRect.set(mLocation[0], mLocation[1], mLocation[0] + c.getWidth(),mLocation[1] + c.getHeight());priase.setText(mActionItems.get(0).mTitle);// 判断是否需要添加或更新列表子类项if (mIsDirty) {// populateActions();}Log.e("", "333  " + this.getHeight());// 50Log.e("", "333  " + c.getHeight());// 96Log.e("", "333  " + this.getWidth());Log.e("", "333  " + (mLocation[1]));// 显示弹窗的位置// showAtLocation(view, popupGravity, mScreenWidth - LIST_PADDING// - (getWidth() / 2), mRect.bottom);showAtLocation(c, Gravity.NO_GRAVITY, mLocation[0] - this.getWidth()- 10, mLocation[1] - ((this.getHeight() - c.getHeight()) / 2));}OnClickListener onclick = new OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.popu_comment:mItemOnClickListener.onItemClick(mActionItems.get(1), 1);dismiss();break;case R.id.popu_praise:mItemOnClickListener.onItemClick(mActionItems.get(0), 0);dismiss();break;}}};/*** 添加子类项*/public void addAction(ActionItem action) {if (action != null) {mActionItems.add(action);mIsDirty = true;}}/*** 清除子类项*/public void cleanAction() {if (mActionItems.isEmpty()) {mActionItems.clear();mIsDirty = true;}}/*** 根据位置得到子类项*/public ActionItem getAction(int position) {if (position < 0 || position > mActionItems.size())return null;return mActionItems.get(position);}/*** 移除指定位置Item* @param position*/public void removeActionItem(int position){if (position < 0 || position > mActionItems.size()&&mActionItems!=null){return ;}else{mActionItems.remove(position);}}/*** 移除指定位置Item* @param position*/public void addPositionActionItem(int position,ActionItem item){if (position < 0 || position > mActionItems.size()&&mActionItems!=null){return ;}else{mActionItems.add(position,item);}}/*** 设置监听事件*/public void setItemOnClickListener(OnItemOnClickListener onItemOnClickListener) {this.mItemOnClickListener = onItemOnClickListener;}/*** @author yangyu 功能描述:弹窗子类项按钮监听事件*/public static interface OnItemOnClickListener {public void onItemClick(ActionItem item, int position);}
}
2.在使用的地方初始化TitlePop,就可以了
<span style="font-size:12px;">/*赞评论点击弹出的popwindow*/private TitlePopup titlePopup;</span>
<pre class="java" name="code"><span style="font-size:12px;">titlePopup = new TitlePopup(this, ZanPinglunUtil.dip2px(this, 165), ZanPinglunUtil.dip2px(this, 40));</span>
3.初始化赞和评论按钮执行点击事件就ok了
最后的执行效果如下图所示:

高仿微信朋友圈评论popwindow相关推荐

  1. android 仿微信朋友圈 评论,2020年android 仿微信朋友圈 评论

    2020年android 仿微信朋友圈 评论 1.如果有人问我:那些艰难的岁月你是怎么熬过来的?我想我只有一句话回答:我有一种强大的精神力量支撑着我,这种力量名字叫"想死又不敢" ...

  2. html仿微信评论输入框,简单仿微信朋友圈评论功能

    [实例简介] 简单实现了微信朋友圈评论的功能,被点击的评论能够随着输入框高度的改变而改变位置! [实例截图] [核心代码] 简单仿微信朋友圈评论 └── TalkInTalk ├── AndroidM ...

  3. android com.mylhyl,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. photopicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

  4. android 微信高仿,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. PhotoPicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

  5. Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。

    转载请注明出处: http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动 ...

  6. 修改源码自定义SwipeRefreshLayout样式——高仿微信朋友圈下拉刷新

    上一篇文章里把SwipeRefreshLayout的原理简单过了一下,大致了解了其工作原理,不熟悉的可以去看一下:http://blog.csdn.net/u011443509/article/det ...

  7. php mysql仿微信朋友圈评论表设计_PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)...

    我们大部分人都发过动态,想必都知道发动态.回复评论.删除动态的整个过程,那么作为初学者,要模仿这些功能有点复杂的,最起码表的关系得弄清楚~~ 先把思路理一下: (1)用户登录,用session读取当前 ...

  8. Android(安卓)高仿微信朋友圈九宫格列表

    目前基本复现微信的朋友圈的浏览效果 直接上效果图吧! 感觉不错的话多多支持吧 由于代码比较多,目前只将核心的适配器代码放出来,如果需要全部的话,下载源码吧,源码地址在最后 适配器代码: private ...

  9. Compose版来啦,高仿微信朋友圈大图缩放、切换、预览功能

    最近在学习Jetpack Compose,想着能否用Jetpack Compose实现微信一些重要界面以及功能.好消息是已经实现了微信聊天界面相关功能以及交互,最近又搞了搞朋友圈的整体交互,网上看了看 ...

最新文章

  1. mxnet dmlc-core\src\io\local_filesys.cc: Check failed: allow_null
  2. 303. Range Sum Query - Immutable
  3. workbench提示工作负载高度不平衡_功率因数负载组
  4. TPAMI 2022综述 | 视觉Transformer系统性测评及未来方向探讨
  5. jquery获取div/div之间的内容.text() 和 .html()区别
  6. Java把表导出成Excel的代码
  7. oracle数据库考试答题,Oracle数据库试题
  8. OCP-1Z0-042-V12.39-47题
  9. 这种情况,支付宝转账可撤回了!一定要会
  10. asp.net 动态生成二维码加文字描述或者二维码加logo
  11. 树莓派Zero 2W python3.7 安装tensorflow2.2
  12. css实现图片自动渐变切换、element-plus 的修改el-table的(边框线为虚线、表头样式)
  13. RTL8723BU wifi 及 热点移植和测试
  14. RHCE 第二周作业
  15. 【链想会】第八期 分布式商业管理的内在逻辑和价值思考
  16. 高校的监控、有线、无线网络业务如何跑起来?
  17. 【汇编语言】典型例题及代码
  18. MINIO使用说明(附文件上传下载)
  19. Android ViewPager Fragment 切换刷新数据,解决生命周期只走一次的问题
  20. mysql主从同步常见错误以及解决方法总结

热门文章

  1. PONYSWAP:构建持续增值、互惠共生、高效繁荣的金融新生态!
  2. Robot Framework如何实现识别验证码
  3. 两台服务器虚拟成一个ip,两台相同服务器ip怎么配置
  4. yml避坑,yml配置使用map,如果key中包含某些符号会消失不见
  5. 为什么计算机连接u盘不显示内存不足,为什么U盘存储空间是满的但却不显示内容,如何解决?...
  6. 手把手教你用Python打造一个语音合成系统
  7. python画三维设置坐标_Python中三维坐标空间绘制的实现
  8. joomla linux 安装教程,CentOS 7安装Joomla
  9. libreOffice构建docker镜像,并基于此运行项目
  10. actionList与MDI的问题