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

点击评论,弹出输入框,添加评论并在页面中实时显示;

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

2. 实际效果

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

丑爆了,我知道了,⊙﹏⊙|| 3. 知识点清单4. 美工素材

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

文件夹r里存放图片

找到更多按钮 5. 关键代码

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

MainAcitivity.java

package main.zhaizu.com.popupwindowdemo;import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ListView;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import main.zhaizu.com.popupwindowdemo.model.Comment;import main.zhaizu.com.popupwindowdemo.model.Item;import main.zhaizu.com.popupwindowdemo.ui.ItemView;public class MainActivity extends AppCompatActivity {private ListView mListView;private View mCommentView;private MyAdapter myAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListView = (ListView) findViewById(R.id.listview);myAdapter = new MyAdapter(this, getData());mListView.setAdapter(myAdapter);mCommentView = findViewById(R.id.comment_view);}// build dataprivate ArrayList<Item> getData() {int ITEM_COUNT = 20;ArrayList<Item> data = new ArrayList<>();data.add(new Item(R.drawable.xiaona, “薄荷栗”, “我学过跆拳道,都给我跪下唱征服”, “昨天”));data.add(new Item(R.drawable.xueyan, “欣然”, “走遍天涯海角,唯有我家风景最好,啊哈哈”, “昨天”));data.add(new Item(R.drawable.leishao, “陈磊_CL”, “老子以后要当行长的,都来找我借钱吧,now”, “昨天”));data.add(new Item(R.drawable.yuhong, “永恒依然”, “房子车子都到碗里来”, “昨天”));data.add(new Item(R.drawable.lanshan, “蓝珊”, “你们这群傻×,我笑而不语”, “昨天”));return data;}// custom adapterprivate class MyAdapter extends BaseAdapter implements ItemView.OnCommentListener {private Context context;private ArrayList<Item> mData;private Map<Integer, ItemView> mCachedViews = new HashMap<>();public MyAdapter(Context context, ArrayList<Item> mData) {this.context = context;this.mData = mData;}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return mData.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view;if (convertView != null) {view = convertView;} else {LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);view = inflater.inflate(R.layout.listview_item, null, false);}if (view instanceof ItemView) {Item data = (Item) getItem(position);((ItemView) view).setData(data);((ItemView) view).setPosition(position);((ItemView) view).setCommentListener(this);cacheView(position, (ItemView) view);}return view;}@Overridepublic void onComment(int position) {showCommentView(position);}private void cacheView(int position, ItemView view) {Iterator<Map.Entry<Integer, ItemView>> entries = mCachedViews.entrySet().iterator();while (entries.hasNext()) {Map.Entry<Integer, ItemView> entry = entries.next();if (entry.getValue() == view && entry.getKey() != position) {mCachedViews.remove(entry.getKey());break;}}mCachedViews.put(position, view);}private void showCommentView(final int position) {mCommentView.setVisibility(View.VISIBLE);mCommentView.findViewById(R.id.submit).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {EditText et = (EditText) mCommentView.findViewById(R.id.edit);String s = et.getText().toString();if (!TextUtils.isEmpty(s)) {// update modelComment comment = new Comment(s);mData.get(position).getComments().add(comment);// update view maybeItemView itemView = mCachedViews.get(position);if (itemView != null && position == itemView.getPosition()) {itemView.addComment();}et.setText(“”);mCommentView.setVisibility(View.GONE);}}});}}}读书须用意,一字值千金。

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

相关文章:

你感兴趣的文章:

标签云: