微信朋友圈的点赞和评论功能,有2个组成部分:左下角的“更多”按钮;点击该按钮后d出的对话框;
PopupWindow,d出框使用PopupWindow实现,这是点赞和评论的载体,具体要涉及 PopupWindow 点击非窗口位置和再次点击消失以及显示位置的问题(根据相应更多按钮的位置确定 PopupWindow 的显示位置
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;public class MainActivity extends AppCompatActivity { private PopupWindow mMorePopupWindow; private int mShowMorePopupWindowWIDth; private int mShowMorePopupWindowHeight; @OverrIDe protected voID onCreate(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<Data> getData() { List<Data> 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<Data> Listdata; private Context context; public MyAdapter(Context context,List<Data> Listdata) { this.context = context; this.Listdata = Listdata; } @OverrIDe public int getCount() { return Listdata.size(); } @OverrIDe public Object getItem(int arg0) { return Listdata.get(arg0); } @OverrIDe public long getItemID(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() { @OverrIDe public voID onClick(VIEw v) { showMore(v); } }); return convertVIEw; } /** * d出点赞和评论框 * * @param moreBtnVIEw */ private voID showMore(VIEw moreBtnVIEw) { if (mMorePopupWindow == null) { LayoutInflater li = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); VIEw content = li.inflate(R.layout.layout_more,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() { @OverrIDe public voID onClick(VIEw v) { final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this); alert.setTitle("点赞"); alert.setNegativebutton("取消",null); alert.show(); } }); // 评论的监听器 comment.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(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 { private int portraitID; // 头像 private String nickname; // 昵称 private String content; // 说说 private String createdAt; // 发布时间 public Data(int portraitID,String nickname,String content,String createdAt) { this.portraitID = portraitID; this.nickname = nickname; this.content = content; this.createdAt = createdAt; } public int getPortraitID() { return portraitID; } public String getNickname() { return nickname; } public String getContent() { return content; } public String getCreatedAt() { return createdAt; } }}
以上所述是小编给大家介绍的AndroID中使用PopupWindow 仿微信点赞和评论d出,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
总结以上是内存溢出为你收集整理的Android中使用PopupWindow 仿微信点赞和评论d出全部内容,希望文章能够帮你解决Android中使用PopupWindow 仿微信点赞和评论d出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)