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

最近在做朋友圈的项目,所以写一个Android仿朋友圈点赞和评论功能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);
  }
} 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android自定义view实现仿抖音点赞效果

    前言 学习自定义view,想找点东西耍一下,刚好看到抖音的点赞效果不错,尝试一下. 抖音效果: 话不多说,先上代码: public class Love extends RelativeLayout { private Context mContext; float[] num = {-30, -20, 0, 20, 30};//随机心形图片角度 public Love(Context context) { super(context); initView(context); } public

  • Android控件实现直播App特效之点赞飘心动画

    现在市面上直播类的应用可以说是一抓一大把,随随便便就以什么主题来开发个直播App,说白了就想在这领域分杯羹.在使用这些应用过程中其实不难发现,在所有的直播界面,少不了的就是各种打赏.各种点赞.今天自己就针对点赞功能敲了一下,代码不多,主要是涉及到动画运动轨迹运算,这里需借助 贝塞尔曲线 相关知识,我使用三阶贝塞尔曲线来实现轨迹动画. 运行效果 一.具体实现流程 仔细分析整个点赞过程可以发现,首先是"爱心"的出现动画,然后是"爱心"以类似气泡的形式向上运动. &quo

  • Android中使用PopupWindow 仿微信点赞和评论弹出

    微信朋友圈的点赞和评论功能,有2个组成部分:左下角的"更多"按钮:点击该按钮后弹出的对话框: PopupWindow,弹出框使用PopupWindow实现,这是点赞和评论的载体,具体要涉及 PopupWindow 点击非窗口位置和再次点击消失以及显示位置的问题(根据相应更多按钮的位置确定 PopupWindow 的显示位置 package com.example.cmm.helloworld; import android.app.AlertDialog; import android

  • Android项目开发 教你实现Periscope点赞效果

    现在视频应用越来越火,Periscope火起来后,国内也出现了不少跟风者,界面几乎跟Periscope一模一样.Periscope确实不错,点赞的效果也让人眼前一亮,很漂亮,于是乎,我就想着自己实现一下. 最终的效果图如下: 最终效果图.gif 录制的效果不太好,手机运行起来还是挺好看的. 不能说一模一样,但是也差不多了吧!~ 惯例: 通过本文你将学习到什么? 自定义view的一些基础方法以及一些注意点 随机数的使用 插补器的使用 属性动画的高级用法 贝塞尔曲线在Android中的实现以及应用

  • Android高级UI特效仿直播点赞动画效果

    本文给大家分享高级UI特效仿直播点赞效果-一个优美炫酷的点赞动画,具体实现代码大家参考本文. 效果图如下: 攻克难点: 心形图片的路径等走向 心形图片的控制范围 部分代码如下: 通过AbstractPathAnimator定义飘心动画控制器 @Override public void start(final View child, final ViewGroup parent) { parent.addView(child, new ViewGroup.LayoutParams(mConfig.

  • Android 仿微信朋友圈点赞和评论弹出框功能

    贡献/下载源码:https://github.com/mmlovesyy/PopupWindowDemo 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多"按钮,弹出对话框: 点击评论,弹出输入框,添加评论并在页面中实时显示: 微信朋友圈点赞和评论功能 2. 实际效果 本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现

  • Android自定义View实现点赞控件

    本文实例为大家分享了Android点赞控件的具体代码,供大家参考,具体内容如下 预览效果 目录 图片类:LikeImageView 文字类:LikeCharTextView 整合类:LikeView.java 自定义属性:attrs.xml 代码 LikeCharTextView public class LikeCharTextView extends View { public static final int DEFAULT_TEXTCOLOR = Color.BLACK; public

  • 简单实用的Android UI微博动态点赞效果

    说起空间动态.微博的点赞效果,网上也是很泛滥,各种实现与效果一大堆.而详细实现的部分,讲述的也是参差不齐,另一方面估计也有很多大侠也不屑一顾,觉得完全没必要单独开篇来写和讲解吧.毕竟,也就是两个view和一些简单的动画效果罢了. 单若是只讲这些,我自然也是不愿花这番功夫的.虽然自己很菜,可也不甘于太菜.所以偶尔看到些好东西,可以延伸学写下,我还是很情愿拿出来用用,顺带秀一秀逼格什么的. 不扯太多,先说说今天实现点赞效果用到的自以为不错的两个点: Checkable 用来扩展View实现选中状态切

  • Android自定义ViewGroup实现堆叠头像的点赞Layout

    简介 这样的点赞列表怎么样?之前做社区的时候也有类似的点赞列表,但是没有这样重叠,一个小小的改变,个人感觉逼格提高不少. 这个很有规则,就是后一个头像会覆盖一部分到前一个头像上,头像多了就像一串糖葫芦了. 这个实现起来不难,自定义ViewGroup,关键重写onLayout方法. 关于自定义控件的基础知识可以看一看这个,整理的很详细: https://github.com/GcsSloop/AndroidNote 实现 自定义属性 属性名 说明 默认值 vertivalSpace 行距 4dp

  • Android中Listview点赞功能的实现

    最近这段时间一直在看Android,利用Listview去实现点赞功能,下面给大家介绍下基本思路. 基本思路: 进入界面–>获取数据–> 在Listview中显示–> 通过map集合(position,boolean)保存每一行是否被点击–> 利用实体类去保存相应的对象–> get/set方法进行相应值得改变–> 点击一次,相应的数量加1 只实现了点赞功能,踩和赞基本类似. 具体实现如下: 继承自BaseAdapter package com.gz.test_listv

随机推荐