wjntekaqskfhwktpgpvzhp

1. 微信弹出框

微信朋友圈的点赞和评论功能,有2个组成部分:

左下角的“更多”按钮;

点击该按钮后弹出的对话框;

微信朋友圈点赞和评论功能

2. 实际效果

本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现弹出窗,忽略具体布局细节。具体效果如下:

3. 知识点

知识点清单:

4. 美工素材

由于 .apk 本质上是个压缩包,我们可以通过解压得到该 .apk 文件的图片素材和布局文件,更多获得素材的方法参见我的另一篇博文 如何获得Android素材图片。通过这种方式得到颜色、更多按钮的样式等素材,仅供学习之用,,请勿做侵犯版权之事。尊重知识版权既是大势所趋,也是终将使每个开发者受益的事。

文件夹r里存放图片

找到更多按钮

5. 关键代码

开发环境:Android Studio 1.3.2 for Mac + ADT 21 + JDK 1.8.0。

MainAcitivity.java

package com.example.cmm.helloworld;

import android.app.AlertDialog;

import android.content.Context;

import android.graphics.drawable.BitmapDrawable;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.PopupWindow;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

{

private PopupWindow mMorePopupWindow;

private int mShowMorePopupWindowWidth;

private int mShowMorePopupWindowHeight;

(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView lv = (ListView) findViewById(R.id.listview);

lv.setAdapter(new MyAdapter(MainActivity.this, getData()));

}

private List getData() {

List data = new ArrayList<>();

data.add(new Data(R.drawable.xiaona, "薄荷栗", "我学过跆拳道,都给我跪下唱征服", "昨天"));

data.add(new Data(R.drawable.xueyan, "欣然", "走遍天涯海角,唯有我家风景最好,啊哈哈", "昨天"));

data.add(new Data(R.drawable.leishao, "陈磊_CL", "老子以后要当行长的,都来找我借钱吧,now", "昨天"));

data.add(new Data(R.drawable.yuhong, "永恒依然", "房子车子都到碗里来", "昨天"));

data.add(new Data(R.drawable.lanshan, "蓝珊", "你们这群傻×,我笑而不语", "昨天"));

return data;

}

class MyAdapter extends BaseAdapter {

private List listdata;

private Context context;

public MyAdapter(Context context, List listdata) {

this.context = context;

this.listdata = listdata;

}

() {

return listdata.size();

}

@Override

public Object getItem(int arg0) {

return listdata.get(arg0);

}

(int arg0) {

return arg0;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = inflater.inflate(R.layout.listview_item, null, false);

// 带赋值区域

ImageView ivPortrait = (ImageView) convertView.findViewById(R.id.portrait);

TextView tvNickName = (TextView) convertView.findViewById(R.id.nick_name);

TextView tvContent = (TextView) convertView.findViewById(R.id.content);

TextView tvCreatedAt = (TextView) convertView.findViewById(R.id.created_at);

ImageView moreBtn = (ImageView) convertView.findViewById(R.id.more_btn);

// 赋值

Data data = listdata.get(position);

ivPortrait.setImageResource(data.getPortraitId());

tvNickName.setText(data.getNickName());

tvContent.setText(data.getContent());

tvCreatedAt.setText(data.getCreatedAt());

// 更多按钮的点击事件

moreBtn.setOnClickListener(new View.OnClickListener() {

(View v) {

showMore(v);

}

});

return convertView;

}

/**

* 弹出点赞和评论框

*

*@param moreBtnView

*/

(View moreBtnView) {

if (mMorePopupWindow == null) {

LayoutInflater li = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View content = li.inflate(R.layout.layout_more, null, false);

mMorePopupWindow = new PopupWindow(content, ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

mMorePopupWindow.setBackgroundDrawable(new BitmapDrawable());

mMorePopupWindow.setOutsideTouchable(true);

mMorePopupWindow.setTouchable(true);

content.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);

mShowMorePopupWindowWidth = content.getMeasuredWidth();

mShowMorePopupWindowHeight = content.getMeasuredHeight();

View parent = mMorePopupWindow.getContentView();

TextView like = (TextView) parent.findViewById(R.id.like);

TextView comment = (TextView) parent.findViewById(R.id.comment);

// 点赞的监听器

like.setOnClickListener(new View.OnClickListener() {

(View v) {

final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);

alert.setTitle("点赞");

alert.setNegativeButton("取消", null);

alert.show();

}

});

// 评论的监听器

comment.setOnClickListener(new View.OnClickListener() {

(View v) {

final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);

alert.setTitle("评论");

alert.setNegativeButton("取消", null);

alert.show();

}

});

}

if (mMorePopupWindow.isShowing()) {

mMorePopupWindow.dismiss();

} else {

int heightMoreBtnView = moreBtnView.getHeight();

mMorePopupWindow.showAsDropDown(moreBtnView, -mShowMorePopupWindowWidth,

-(mShowMorePopupWindowHeight + heightMoreBtnView) / 2);

}

}

}

class Data {

String nickName; String createdAt; (int portraitId, String nickName, String content, String createdAt) {

this.portraitId = portraitId;

this.nickName = nickName;

this.content = content;

this.createdAt = createdAt;

}

() {

return portraitId;

}

public String getNickName() {

return nickName;

}

public String getContent() {

return content;

}

public String getCreatedAt() {

return createdAt;

}

}

}

6. 感谢

本文中 listview 的布局改编自 ,感谢该作者的分享。

如需完整工程,请留下邮箱。

android 微信点赞功能,Android 仿微信点赞和评论弹出框相关推荐

  1. Android自定义弹窗模仿微信,Android 仿微信朋友圈点赞和评论弹出框功能

    本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多&q ...

  2. Android 仿微信点赞和评论弹出框

    下载源码:http://download.csdn.net/detail/zhaizu/9790030 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的 ...

  3. Android仿IOS封装通用的弹出框Dialog和底部弹出列表选择框 仿美团顶部条件筛选框 附自定义ViewGroup

    弹出框 背景 提示与询问弹出框 实现 使用 列表选择框 实现 使用 顶部条件筛选框 实现 自定义ViewGroup 使用 总结 背景 鉴于Android提供的默认弹出框很一般,IOS的弹出框样式还不错 ...

  4. Android仿淘宝口令复制弹出框功能

    1.我要做什么 应用场景: 我的朋友使用微信给我发一个淘宝链接的口令,我复制口令,进入我的淘宝,弹框,显示口令的详情,点击详情,进入商品页面. 存在的问题: 但这存在一个问题,我的淘宝并不总是关闭状态 ...

  5. uniapp转微信小程序后 video标签的一直出现弹出框 关不掉的问题

    我是在video的@timeupdate中写的 大于10分钟就弹出提示框(包括滑动) 这时会多次请求这个方法 因为这个方法是看视频时间变化 所以代码: 视频标签 <video :src=&quo ...

  6. ecshop仿淘宝加入购物车弹出框【支持任何页面】淡出淡隐固定屏幕-兼容ie

    效果演示如图: 如果没有会员还购物买过的商品,则下面那部份不会显示! 有渐隐渐出效果,也是非jquery的,固定屏幕滚动,测试过是支持ie6-ie9的,无闪动,喜欢这个HACK代码的朋友也可以参考下, ...

  7. android微信点赞ui,Android中使用PopupWindow 仿微信点赞和评论弹出

    微信朋友圈的点赞和评论功能,有2个组成部分:左下角的"更多"按钮:点击该按钮后弹出的对话框: PopupWindow,弹出框使用PopupWindow实现,这是点赞和评论的载体,具 ...

  8. Android 二维码扫描(仿微信界面),根据Google zxing

    Android 二维码扫描(仿微信界面),根据Google zxing Android项目开发中经常会用到二维码扫描,例如登陆.支付等谷歌方面已经有了一个开源库(地址: https://github. ...

  9. 微信分享功能android,Android微信分享功能实例+demo

    Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留 ...

最新文章

  1. Ms Sql Server 基本管理脚本(1)
  2. mysql复制架构迁移到pxc_mysql复制(高可用架构方案的基础)
  3. 使用maven工程实现Mybatis自动生成Mapper文件
  4. c语言中的字符变量用保留字()来说明,C语言程序设计填空题2
  5. respberry pi3 上手随记
  6. WebMagic学习-解析json
  7. 你知道 Java 类是如何被加载的吗?
  8. 周鸿祎内部讲话:大公司要创新,就必须做小
  9. UVA558 LA5579 Wormholes【Floyd算法】
  10. poj 2502 Subway dijkstra基础 !!!!入门题
  11. 读 Timothy Gowers 之 Mathematics: A Very Short Introduction
  12. 干货|一文搞定 uiautomator2 自动化测试工具使用
  13. 读书《你能写出好故事:写作的诀窍、大脑的奥秘、认知的陷阱》
  14. JavaScript script标签同步异步加载过程
  15. VS2015 打包应用程序“系统必备”
  16. Veloview阅读笔记1
  17. 惠普服务器是什么芯片,惠普将首次在服务器中应用AMD的Opteron芯片
  18. 历代名人、学者对商鞅的评价
  19. 软件开发,web开发和应用程序开发的区别?
  20. 鱼眼图像畸变校正matlab,鱼眼镜头畸变校正算法的设计

热门文章

  1. 计算机关闭后剪切板的内容会消失,清除win10剪贴板历史记录,保证隐私数据不泄露...
  2. Android穿山甲SDK接入信息流广告
  3. Flutter:从入门到实践
  4. 盘点互联网大佬背后的女人,最后一个你肯定认识
  5. google play 此应用使用的结算功能版本已不能受支持。
  6. cij期刊_核心期刊评价与文献计量学研究CJournalJLX
  7. android -------- Hawk数据库
  8. 文献管理工具EndNote使用
  9. FreeSwitch呼入处理流程
  10. java方法声明无效_Java错误 - “无效的方法声明;需要返回类型”