android 微信点赞功能,Android 仿微信点赞和评论弹出框
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 仿微信点赞和评论弹出框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用公式计算π=4(1-1/3+1/5-
- 下一篇: android sina oauth2.