Android仿微信朋友圈點(diǎn)贊和評論功能
最近在做朋友圈的項(xiàng)目,所以寫一個(gè)Android仿朋友圈點(diǎn)贊和評論功能Demo,代碼就是簡單實(shí)現(xiàn)了一下功能,沒有做優(yōu)化,湊合看。
圖文排列是用的RecyclerView實(shí)現(xiàn)的,彈窗效果是用的自定義的PopupWindow,點(diǎn)贊應(yīng)該是在本地請求數(shù)據(jù)庫,設(shè)置一個(gè)flag,獲取當(dāng)前用戶的id后,帶著id向服務(wù)器post一個(gè)flag,評論就比較簡單了,也是獲取當(dāng)前朋友id(或者昵稱),帶著內(nèi)容,向服務(wù)器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[]{
"詩人承陳隋風(fēng)流,浮靡相矜。",
"古今詩人眾矣,而杜子美為首,豈非以其流落饑寒,終身不用,而一飯未嘗忘君也歟?",
"老杜詩,凡一篇皆工拙相半,古人文章類如此。",
"王介甫只知巧語之為詩,而不知拙語亦詩也;山谷只知奇語之為詩,而不知常語亦詩也",
"子美詩奄有古今。學(xué)者能識國風(fēng)、騷人之旨,然后知子美用意處",
"或問王荊公云:編四家詩,以杜甫為第一,李白為第四,豈白之才格詞致不逮甫也?",
"山谷云,老杜作詩,退之作文,無一字無來處,蓋后人讀書少,故謂韓、杜自作此語耳。",
"觀杜者不唯見其律,而有見其騷者焉;不唯見其騷,而有見其雅者焉",
"盛唐一味秀麗雄渾。杜則精粗、巨細(xì)、巧拙、新陳、險(xiǎn)易、淺深、濃淡、肥瘦靡不畢具",
"大概杜有三難:極盛難繼,首創(chuàng)難工,遘衰難挽",
"詩人承陳隋風(fēng)流,浮靡相矜。",
"古今詩人眾矣,而杜子美為首,豈非以其流落饑寒,終身不用,而一飯未嘗忘君也歟?",
"老杜詩,凡一篇皆工拙相半,古人文章類如此。",
"王介甫只知巧語之為詩,而不知拙語亦詩也;山谷只知奇語之為詩,而不知常語亦詩也",
"子美詩奄有古今。學(xué)者能識國風(fēng)、騷人之旨,然后知子美用意處",
"或問王荊公云:編四家詩,以杜甫為第一,李白為第四,豈白之才格詞致不逮甫也?",
"山谷云,老杜作詩,退之作文,無一字無來處,蓋后人讀書少,故謂韓、杜自作此語耳。",
"觀杜者不唯見其律,而有見其騷者焉;不唯見其騷,而有見其雅者焉",
"盛唐一味秀麗雄渾。杜則精粗、巨細(xì)、巧拙、新陳、險(xiǎn)易、淺深、濃淡、肥瘦靡不畢具",
"大概杜有三難:極盛難繼,首創(chuàng)難工,遘衰難挽"
};
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 + "被點(diǎn)擊了", 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, "點(diǎn)贊", 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) { //優(yōu)化:當(dāng)popwindow為空的時(shí)候才創(chuàng)建,不為空,直接復(fù)用
int width = zanWidth * 5; //設(shè)置PopupWindow的寬
int height = zanHeight; //設(shè)置PopupWindow的高
boolean focusable = true; //設(shè)置PopupWindow可獲取焦點(diǎn)
mPop = new PopupWindow(contentView, width, height, focusable);
//為PopupWindow設(shè)置背景,獲取焦點(diǎn)才能生效(谷歌官方要求)
mPop.setBackgroundDrawable(new ColorDrawable());
}
View anchor = holder.zan; //指定PopupWindow在哪個(gè)控件下面顯示
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);
}
}
具體的彈窗位置和點(diǎn)贊按鈕,評論按鈕實(shí)現(xiàn)效果只用了吐司彈出,可以加自己的業(yè)務(wù)邏輯進(jìn)去。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Android如何實(shí)現(xiàn)好的彈層體驗(yàn)效果
當(dāng)前?App?的設(shè)計(jì)趨勢越來越希望給用戶沉浸式體驗(yàn),這種設(shè)計(jì)會讓用戶盡量停留在當(dāng)前的界面,而不需要太多的跳轉(zhuǎn),這就需要引入彈層。本篇我們就來講講彈層這塊需要注意哪些用戶體驗(yàn)2022-11-11
android獲取及監(jiān)聽手機(jī)網(wǎng)絡(luò)狀態(tài)
大家好,本篇文章主要講的是android獲取及監(jiān)聽手機(jī)網(wǎng)絡(luò)狀態(tài),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
android Matrix實(shí)現(xiàn)圖片隨意放大縮小或拖動
這篇文章主要為大家詳細(xì)介紹了android Matrix實(shí)現(xiàn)圖片隨意放大縮小或拖動效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android實(shí)現(xiàn)清除單個(gè)域名的cookie
這篇文章主要介紹了Android實(shí)現(xiàn)清除單個(gè)域名的cookie,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android中點(diǎn)擊按鈕啟動另一個(gè)Activity及Activity之間傳值問題
這篇文章主要介紹了Android中點(diǎn)擊按鈕啟動另一個(gè)Activity及Activity之間傳值問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01

