1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android 微信朋友圈效果(附完整注释)

android 微信朋友圈效果(附完整注释)

时间:2021-11-02 07:53:10

相关推荐

android 微信朋友圈效果(附完整注释)

请尊重原创,转载请注明出处:/mabeijianxi/article/details/50533703

先看下效果图:

源码地址:/mabeijianxi/Circle-of-friends

源码的核心类(adapter)里面几乎对每个方法都有注解。本demo主要想分享的是:

listview各种嵌套处理listview的优化处理用ImageLoader的一些特殊方式来优化图片加载listview的高度封装操作(刷新、加载更多、ui操作等)Activity动画的灵活应用下面贴出的是主界面的adapter代码:

<strong></strong><span style="font-size:14px;">public class EaluationAdapter extends RecyclerView.Adapter<EaluationAdapter.EaluationHolder> {/*** 当高分辨率的时候服务器的图片显得太小,这里优化下显示比例*/private Float fTimes;private Context mContext;private boolean mIsLoadImage = true;private ArrayList<EaluationListBean> mEaluationList;private EaluationGvPicAdaper mEaluationGvPicAdaper;private ImageLoader mImageLoader = ImageLoader.getInstance();private DisplayImageOptions mConfig = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.home_youpin).showImageOnFail(R.drawable.home_youpin).cacheInMemory(true)// 在内存中会缓存该图片.cacheOnDisk(true)// 在硬盘中会缓存该图片.considerExifParams(true)// 会识别图片的方向信息.resetViewBeforeLoading(true)// 重设图片.build();public ArrayList<EaluationListBean> getmEaluationList() {return mEaluationList;}/*** 是否加载图片** @param isLoadImage*/public void setLoadImage(boolean isLoadImage) {this.mIsLoadImage = isLoadImage;}public EaluationAdapter(Context context) {this.mContext = context;mEaluationList = new ArrayList<>();// 适配单图放大比例String sTimes = mContext.getResources().getString(R.string.times);fTimes = Float.valueOf(sTimes);}public void clearAdapterNotifyData() {mEaluationList.clear();notifyDataSetChanged();}public void clearAdapter() {mEaluationList.clear();}public void addEaluationDataAllNotifyData(ArrayList<EaluationListBean> data) {if (data != null) {mEaluationList.addAll(data);notifyDataSetChanged();}}public void addEaluationDataAll(ArrayList<EaluationListBean> data) {if (data != null) {mEaluationList.addAll(data);}}public void addEaluationData(EaluationListBean data) {if (data != null) {mEaluationList.add(data);notifyDataSetChanged();}}@Overridepublic int getItemCount() {return mEaluationList.size();}@Overridepublic EaluationHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(mContext).inflate(R.layout.item_comments, parent, false);return new EaluationHolder(view);}@Overridepublic void onBindViewHolder(EaluationHolder holder, int position) {EaluationListBean ealuationListBean = mEaluationList.get(position);List<EaluationListBean.EaluationPicBean> attachments = ealuationListBean.attachments;if (ealuationListBean.avatar != null) {mImageLoader.displayImage(ealuationListBean.avatar.smallPicUrl, holder.icon, mConfig);setIconClick(holder, ealuationListBean.avatar.smallPicUrl, ealuationListBean.avatar.picUrl);} else {holder.icon.setImageResource(R.drawable.home_youpin);setIconClick(holder, "null", "null");}holder.tv_nickname.setText(ealuationListBean.userName);holder.tv_text.setText(ealuationListBean.content);holder.tv_date.setText(ealuationListBean.creatTime);holder.rb_stars.setRating(ealuationListBean.grade);setUpImage(holder, attachments, position);setUpTereplys(holder, ealuationListBean.evaluatereplys);}/*** 设置回复内容规则*这里用的是自定义的LinearLayout,这样比listview消耗要小一些* @param holder* @param evaluatereplysList*/private void setUpTereplys(EaluationHolder holder, List<EvaluatereplysBean> evaluatereplysList) {if (evaluatereplysList != null && evaluatereplysList.size() > 0) {holder.lv_comments_details.setVisibility(View.VISIBLE);EvaluatereplysAdapter evaluatereplysAdapter = new EvaluatereplysAdapter(mContext, evaluatereplysList);holder.lv_comments_details.setAdapter(evaluatereplysAdapter);} else {holder.lv_comments_details.setVisibility(View.GONE);}}/*** 设置图片显示规则** @param holder* @param attachments* @param position*/private void setUpImage(EaluationHolder holder, List<EaluationListBean.EaluationPicBean> attachments, int position) {holder.fl_image.setVisibility(View.GONE);if (attachments != null) {if (attachments.size() == 0) {holder.fl_image.setVisibility(View.GONE);} else if (attachments.size() == 1) {setSingleImage(attachments, holder, position);holder.gv_image.setVisibility(View.GONE);holder.iv_image.setVisibility(View.VISIBLE);holder.fl_image.setVisibility(View.VISIBLE);} else {holder.iv_image.setVisibility(View.GONE);holder.gv_image.setVisibility(View.VISIBLE);holder.fl_image.setVisibility(View.VISIBLE);setManyImage(attachments, holder, position);}} else {holder.fl_image.setVisibility(View.GONE);}}/*** 设置头像的点击看大图事件,这里为了方便直接把bean类进行了转换传递* @param holder* @param miniPicUrl* @param picUrl*/private void setIconClick(EaluationHolder holder, final String miniPicUrl, final String picUrl) {holder.icon.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(mContext, LookBigPicActivity.class);Bundle bundle = new Bundle();List<EaluationListBean.EaluationPicBean> attachments = new ArrayList<EaluationListBean.EaluationPicBean>();EaluationListBean.EaluationPicBean ealuationPicBean = new EaluationListBean().new EaluationPicBean();ealuationPicBean.imageUrl = picUrl;ealuationPicBean.smallImageUrl = miniPicUrl;attachments.add(ealuationPicBean);bundle.putSerializable(LookBigPicActivity.PICDATALIST, (Serializable) attachments);intent.putExtras(bundle);intent.putExtra(LookBigPicActivity.CURRENTITEM, 0);mContext.startActivity(intent);//动画处理startActivityAnim();}});}/*** 设置多图** @param attachments* @param holder* @param position*/private void setManyImage(List<EaluationListBean.EaluationPicBean> attachments, EaluationHolder holder, int position) {// mEaluationGvPicAdaper = (EaluationGvPicAdaper) holder.gv_image.getTag(position);// if(mEaluationGvPicAdaper==null){EaluationGvPicAdaper mEaluationGvPicAdaper = new EaluationGvPicAdaper(mContext, attachments, mIsLoadImage);// holder.gv_image.setTag(position,mEaluationGvPicAdaper);holder.gv_image.setAdapter(mEaluationGvPicAdaper);// }}/*** 设置单图** @param attachments* @param holder*/private void setSingleImage(final List<EaluationListBean.EaluationPicBean> attachments, final EaluationHolder holder, final int position) {//可更具请求选择是否设置是否对单图快滑处理// if (mIsLoadImage) {mImageLoader.displayImage(attachments.get(0).smallImageUrl, holder.iv_image, mConfig, new ImageLoadingListener() {@Overridepublic void onLoadingStarted(String imageUri, View view) {}@Overridepublic void onLoadingFailed(String imageUri, View view, FailReason failReason) {}@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {//优化显示比例if (fTimes != 1) {int height = loadedImage.getHeight();int width = loadedImage.getWidth();FrameLayout.LayoutParams params = new FrameLayout.LayoutParams((int) (width * fTimes), (int) (height * fTimes));holder.iv_image.setLayoutParams(params);}}@Overridepublic void onLoadingCancelled(String imageUri, View view) {}});holder.iv_image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 点击查看大图的操作Intent intent = new Intent(mContext, LookBigPicActivity.class);Bundle bundle = new Bundle();bundle.putSerializable(LookBigPicActivity.PICDATALIST, (Serializable) attachments);intent.putExtras(bundle);intent.putExtra(LookBigPicActivity.CURRENTITEM, 0);mContext.startActivity(intent);startActivityAnim();}});// }// 优化快滑时的图片加载/* else {//这样其实有时候会得不到,具体原因可以看源码里面的util,里面有详细注释Bitmap bitmap = mImageLoader.getMemoryCache().get(attachments.get(0).smallImageUrl);if (bitmap != null) {holder.iv_image.setImageBitmap(bitmap);}}*/}/*** 开始跳转动画*/private void startActivityAnim() {((MainActivity) mContext).overridePendingTransition(R.anim.activity2pic_in, R.anim.activity2pic_out);}static class EaluationHolder extends RecyclerView.ViewHolder {public CircularImage icon;public ImageView iv_image;public TextView tv_nickname;public TextView tv_text;// 可更具情况设置为emoji表情public TextView tv_date;public RatingBar rb_stars;public CustomGridView gv_image;public LinearListView lv_comments_details;public FrameLayout fl_image;public EaluationHolder(View itemView) {super(itemView);icon = (CircularImage) itemView.findViewById(R.id.icon);iv_image = (ImageView) itemView.findViewById(R.id.iv_image);tv_nickname = (TextView) itemView.findViewById(R.id.tv_nickname);tv_text = (TextView) itemView.findViewById(R.id.tv_text);tv_date = (TextView) itemView.findViewById(R.id.tv_date);rb_stars = (RatingBar) itemView.findViewById(R.id.rb_stars);gv_image = (CustomGridView) itemView.findViewById(R.id.gv_image);lv_comments_details = (LinearListView) itemView.findViewById(R.id.lv_comments_details);fl_image = (FrameLayout) itemView.findViewById(R.id.fl_image);}}}</span>

主要对单图与多图处理,对滑动优化处理,其实还开了硬件加速(android:hardwareAccelerated="true"),这样可以最大程度让listview顺畅,大图查看模仿了QQ空间的查看模式,具体的可以看源码里面的几个adapter。

能力有限,如有不足的地方欢迎指出。

源码地址:/mabeijianxi/Circle-of-friends

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。