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

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

最近在做朋友圈的项目,所以写一个Demo,代码就是简单实现了一下功能,没有做优化,凑合看

图文排列是用的RecyclerView实现的,弹窗效果是用的自定义的PopupWindow,点赞应该是在本地请求数据库,设置一个flag,获取当前用户的id后,带着id向服务器post一个flag,评论就比较简单了,也是获取当前朋友id(或者昵称),带着内容,向服务器post

贴代码:

package com.example.lenovo.dianzandemo;

import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private int[] pics;
    private String[] descs;
    public Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = getApplicationContext();
        pics = new int[]{R.mipmap.test1, R.mipmap.test5, R.mipmap.test6, R.mipmap.test7, R.mipmap.test8, R.mipmap.test9, R.mipmap.test10, R.mipmap.test12, R.mipmap.test13, R.mipmap.test14, R.mipmap.test1, R.mipmap.test5, R.mipmap.test6, R.mipmap.test7, R.mipmap.test8, R.mipmap.test9, R.mipmap.test10, R.mipmap.test12, R.mipmap.test13, R.mipmap.test14};
        descs = new String[]{
                "诗人承陈隋风流,浮靡相矜。",
                "古今诗人众矣,而杜子美为首,岂非以其流落饥寒,终身不用,而一饭未尝忘君也欤?",
                "老杜诗,凡一篇皆工拙相半,古人文章类如此。",
                "王介甫只知巧语之为诗,而不知拙语亦诗也;山谷只知奇语之为诗,而不知常语亦诗也",
                "子美诗奄有古今。学者能识国风、骚人之旨,然后知子美用意处",
                "或问王荆公云:编四家诗,以杜甫为第一,李白为第四,岂白之才格词致不逮甫也?",
                "山谷云,老杜作诗,退之作文,无一字无来处,盖后人读书少,故谓韩、杜自作此语耳。",
                "观杜者不唯见其律,而有见其骚者焉;不唯见其骚,而有见其雅者焉",
                "盛唐一味秀丽雄浑。杜则精粗、巨细、巧拙、新陈、险易、浅深、浓淡、肥瘦靡不毕具",
                "大概杜有三难:极盛难继,首创难工,遘衰难挽",
                "诗人承陈隋风流,浮靡相矜。",
                "古今诗人众矣,而杜子美为首,岂非以其流落饥寒,终身不用,而一饭未尝忘君也欤?",
                "老杜诗,凡一篇皆工拙相半,古人文章类如此。",
                "王介甫只知巧语之为诗,而不知拙语亦诗也;山谷只知奇语之为诗,而不知常语亦诗也",
                "子美诗奄有古今。学者能识国风、骚人之旨,然后知子美用意处",
                "或问王荆公云:编四家诗,以杜甫为第一,李白为第四,岂白之才格词致不逮甫也?",
                "山谷云,老杜作诗,退之作文,无一字无来处,盖后人读书少,故谓韩、杜自作此语耳。",
                "观杜者不唯见其律,而有见其骚者焉;不唯见其骚,而有见其雅者焉",
                "盛唐一味秀丽雄浑。杜则精粗、巨细、巧拙、新陈、险易、浅深、浓淡、肥瘦靡不毕具",
                "大概杜有三难:极盛难继,首创难工,遘衰难挽"
        };
        initView();
    }

    private void initView() {
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

        RecyclerAdapter recyclerAdapter = new RecyclerAdapter(pics, descs, mContext);
        recyclerView.setAdapter(recyclerAdapter);
    }

}

class RecyclerAdapter extends RecyclerView.Adapter<MyViewHolder>  {

    private Context mContext;
    private String[] descs;
    private int[] pics;
    private PopupWindow mPop;

    public RecyclerAdapter(int[] pics, String[] descs, Context context) {
        this.pics = pics;
        this.descs = descs;
        this.mContext = context;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(parent.getContext(), R.layout.item_layout, null);
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.desc.setText(descs[position]);
        holder.icon.setImageResource(pics[position]);
        holder.zan.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
//                Toast.makeText(mContext, position + "被点击了", Toast.LENGTH_SHORT).show();
                int zanWidth = holder.zan.getWidth();
                int zanHeight = holder.zan.getHeight();
                View contentView = LayoutInflater.from(mContext).inflate(R.layout.pop_layout, null);
                TextView popZan = (TextView) contentView.findViewById(R.id.pop_zan);
                TextView popPinlun = (TextView) contentView.findViewById(R.id.pop_pinlun);
                popZan.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(mContext, "点赞", Toast.LENGTH_SHORT).show();
                    }
                });
                popPinlun.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(mContext, "评论", Toast.LENGTH_SHORT).show();
                    }
                });

                if (mPop == null) { //优化:当popwindow为空的时候才创建,不为空,直接复用
                    int width = zanWidth * 5; //设置PopupWindow的宽
                    int height = zanHeight; //设置PopupWindow的高
                    boolean focusable = true; //设置PopupWindow可获取焦点
                    mPop = new PopupWindow(contentView, width, height, focusable);
                    //为PopupWindow设置背景,获取焦点才能生效(谷歌官方要求)
                    mPop.setBackgroundDrawable(new ColorDrawable());
                }
                View anchor = holder.zan; //指定PopupWindow在哪个控件下面显示
                int xoff = -zanWidth;//指定PopupWindow在x轴方向上的偏移量
                int yoff = -zanHeight;//指定PopupWindow在Y轴方向上的偏移量
                mPop.showAsDropDown(anchor, xoff, yoff);
            }
        });
    }

    @Override
    public int getItemCount() {
        return pics.length;
    }

}

class MyViewHolder extends RecyclerView.ViewHolder {

    public TextView desc;
    public ImageView icon;
    public ImageView zan;

    public MyViewHolder(View itemView) {
        super(itemView);
        desc = (TextView) itemView.findViewById(R.id.desc);
        icon = (ImageView) itemView.findViewById(R.id.icon);
        zan = (ImageView) itemView.findViewById(R.id.zan);
    }
}

具体的弹窗位置和点赞按钮,评论按钮实现效果只用了吐司弹出,可以加自己的业务逻辑进去

时间: 2024-08-05 16:55:37

仿微信朋友圈点赞和评论功能的相关文章

仿微信朋友圈/qq空间评论 下载刷新下拉加载回复、评论等

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">    D</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);"&g

Android 仿微信朋友圈发动态功能(相册图片多选)

代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-152760-1-1.html 代码作者: 楼主 代码效果图: 本帖最后由 ^.^ 于 2014-7-8 16:23 编辑 <ignore_js_op> <ignore_js_op> <ignore_js_op> DEMO一共13个类 大约2000行代码,童鞋们耐心点看基本思路是:1

高仿微信朋友圈

简单介绍 写这个微信朋友圈的目的是今年公司开展了一个趣味运动会,有一个比赛项目是微信点赞.对于我们程序猿来说,这不是送分嘛.于是我们团队光荣的把这个写一个朋友的任务交给了我,要求是类似度百分之99以上,能上传自己定义照片,能更改点赞数与评论数.包含姓名.日期等都能改,于是花费了3天时间写了这个高仿的微信,因为时间关系,代码写的不是非常好.多多谅解.须要的朋友也能够继续完好.因为功能也不少.就不贴代码,直接上图,后面会给下载Demo链接. 主界面 我的相冊 这里提示一下.长按点击我的相冊右上角的相

Android:NineGridLayout — 仿微信朋友圈和QQ空间的九宫格图片展示自定义控件

NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只有1张图时,可以自己定制图片宽高,也可以使用默认九宫格的宽高: 2.当只有4张图时,以2*2的方式显示: 3.除以上两种情况下,都是按照3列方式显示,但这时有一些细节: a.如果只有9张图,当然是以3*3的方式显示: b.如果超过9张图,可以设置是否全部显示. 如果设置不完全显示,则按照3*3的方式

仿微信朋友圈发图片

仿微信朋友圈发图片 下载地址:http://www.devstore.cn/code/info/934.html 运行截图:    

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

修改源码自定义SwipeRefreshLayout样式——高仿微信朋友圈下拉刷新 原文地址:https://www.cnblogs.com/zhujiabin/p/8194996.html

超简单--仿微信朋友圈展开显示更多文字功能

在做的项目需要这个功能.而且是挺常用的一个功能. 需求是有一个评论列表,太多时要隐藏,然后点击展开更多按钮就可以显示全文. 思路就是可以弄俩TextView,一个MaxLine为n,一个不限制,然后再弄个按钮控制两个TextView交替显示. 有了思路马上动手,然后发现这个效果真是很简单就实现了..效果图 好了,废话不多说,上代码.讲解不会很多,因为实在太简单了... <?xml version="1.0" encoding="utf-8"?> <

IOS仿微信朋友圈好友展示

前几天小伙伴要帮他做一个群聊功能,里面有好友列表,要求和微信的差不多(见下图),让小伙伴自己实现了下,他将CollectionView放在tableView的tableHead中,可是当添加好友或删除好友刷新数据源的时候并没有效果.让他将CollectionView放在tableView的cell中,结果是数据刷新了可是还是有问题删除后刷新数据时CollectionView的高度变的有问题,我就调了下,实现比较简单,只是一些细节问题,现在效果还蛮不错的,分享一下. 1.定义CollectionV

ReactNative仿微信朋友圈App

摘要: 欢迎各位同学加入: React-Native群:397885169 大前端群:544587175 大神超多,热情无私帮助解决各种问题. 一.前沿||潜心修心,学无止尽.生活如此,coding亦然.本人鸟窝,一只正在求职的鸟.联系我可以直接微信:jkxx123321 二.关于该App的介绍,采用UGC用户共享内容,用户下载注册后,可以发布内容到平台,多用户之间可以相互关注(关注也相当于加好友了)用到的核心技术不多,后期持续跟新,项目完善后会上传github共享.**该App本人还基于Nod