点赞处理的一些小技巧

2024-08-24 07:48
文章标签 技巧 处理 点赞

本文主要是介绍点赞处理的一些小技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天来讲一些平时用的小技巧,然后由此引申一些其他的小技巧。

点赞是我们平时业务开发最常接触的,但如何更投巧的去做这块,还需要细细的开动小脑筋,下面会有一些和平时开发的对比,慢慢品味吧

连续点赞网络请求处理

在我们处理点赞业务中,主要处理“赞”图片的翻转和结果的网络请求,按照我们常规操作的话,每一次点击,都会把结果告知服务器,操作伪代码如下:

    boolean zanFlag = false;public void clickZan(View view) {if (zanFlag) {imgZan.setImageResource(R.drawable.zan_normal);} else {imgZan.setImageResource(R.drawable.zan_focus);}zanFlag = !zanFlag;//网络请求操作requestNet();}

这么看似乎是没什么问题,业务处理也是可行的,然后我们在网络请求这个部分做个日志打印,模拟网络请求,然后来看下图:

当我们在开始部分缓慢的进行点赞时,似乎是没有任何问题的,后面我开始疯狂点击,不断的产生网络的请求。假设,如何我疯狂连续点击100次,最终的结果只是“赞了”或是“没赞”,也就是只有2个结果,为了这两个结果,我们需要做100次网络请求,实数浪费。

从产品设计思路来思考,对于连续请求的处理,我们完全可以延时等待用户停止疯狂点击,然后将最后一次的结果作为最终结果再来上传处理,避免了在疯狂点击时频繁请求。

顺着这个思路来思考编码,我们需要一个定时,即在用户点击该按钮时,延时这个定时等待用户是否还会继续点击,如果用户在这个延时内还继续点击,则取消之前的定时,重新发送一个定时,直到用户停止点击了,延时也到了,则在延时到了的回调中去处理网络请求,这样,可以省了很多无用网络请求,接下来,我们开始编码

    Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//网络请求操作requestNet();}};boolean zanFlag = false;private static final int DELAY_MESSAGE = 0x0429;private static final int delayTime = 500;public void clickZan(View view) {if (zanFlag) {imgZan.setImageResource(R.drawable.zan_normal);} else {imgZan.setImageResource(R.drawable.zan_focus);}zanFlag = !zanFlag;handler.removeMessages(DELAY_MESSAGE);handler.sendEmptyMessageDelayed(DELAY_MESSAGE,delayTime);}

这里我使用了handler来做延时的处理,每次点击时,先把handler的 DELAY_MESSAGE 先移除了,然后重新发送延时 DELAY_MESSAGE 消息,延时时间设置了500毫秒,如果在500毫秒内疯狂点击,在handler消息还未到达时,早已通过removeMessage将之前的消息给移除掉了,通过这样的一个小技巧,我们来看看效果:

在我频的繁操作下,也就是最后一次有效,这样避免了之前频繁的无效操作。

通过这个例子,开始延伸,想到了我们平时用到的搜索,接下来讲搜索

实时搜索网络请求

有的业务情况是在EditText中实时搜索,显示网络返回的结果,对于搜索,一般都是给EditText添加TextWatcher监听,在onTextChanged回调中实时获取当前EditText的内容,然后请求网络,这里的问题也是和上面的问题一样,因为在用户输入文本的时候,TextWatcher会实时回调,回调十分频繁,我们只想在用户确认搜索结果时,用户不在继续输入了,然后再去请求网络,这里的处理也是和上面一样,通过延时的方式来解决频繁的操作。
伪代码

 editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {handler.removeMessages(DELAY_MESSAGE);Message msg = handler.obtainMessage();msg.what = DELAY_MESSAGE;msg.obj = s.toString();handler.sendMessageDelayed(msg, delayTime);}@Overridepublic void afterTextChanged(Editable s) {}});Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//网络请求操作Log.e("TAG", "editText : " + msg.obj);}};

效果如下,还是十分的nice的


由于点赞部分,又让我想起了点赞动画的处理,这个地方参考了该篇博文的思路使用Glide V4 实现GIF点赞动画 , 他的思路比较巧妙,也是我觉得特别喜欢的一个地方,下面我来说下思路:

1、通过view点击的位置,获取view当前所在屏幕位置的坐标

 int arr[] = new int[2];view.getLocationInWindow(arr);

2、获取Decorview,创建个一样的view,add到Decorview上

        View decorView = getWindow().getDecorView();if (decorView instanceof FrameLayout) {frameLayout = (FrameLayout) decorView;}ImageView imageView = new ImageView(this);imageView.setImageResource(resInt);FrameLayout.LayoutParams layoutParams =new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);//获取位置拿到的坐标是控件左上角的位置,采用margin的方式来定位控件在decorview中的位置layoutParams.leftMargin = arr[0];layoutParams.topMargin = arr[1];layoutParams.width = 100;layoutParams.height = 100;imageView.setLayoutParams(layoutParams);frameLayout.addView(imageView);

3、将添加到Decorview的view做动画,监听动画结束时移除该view

   set.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {ViewGroup parent = (ViewGroup) view.getParent();if (parent != null) {parent.removeView(view);}}@Overridepublic void onAnimationRepeat(Animation animation) {}});

具体代码就不贴了,大家可以看原链接,下面贴一张我做的图

动画主要就是一个透明+缩放的一个AnimationSet

这篇关于点赞处理的一些小技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101883

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)