Android进阶之路 您所在的位置:网站首页 app监听用户 Android进阶之路

Android进阶之路

2024-07-09 21:02| 来源: 网络整理| 查看: 265

业务需求来源于售货机项目,虽然最终这个项目没有实施,但是这个功能确实很常用,考虑到在Android中我还没做过这个功能,故此找到实现方式后记录于此 ~

最初接到此需求的时候,我只考虑到了定时器,远远没有全面思考,一些场景根本就没有考虑到,索性互联网的开放精神,让我学习到了更多的思考方向 !

后来的后来,我补全了一个售货机常用的 商品轮播展示功能 ~

Effect

这里我直接通过了log查看了需求实现效果,表示使用的话没有什么问题 在这里插入图片描述

思考方式 问题

1.如何监听用户未操作时效? 2.如何监听用户的行为? 3.如何处理操作行为与操作时效的关系?

反思

1.监听用户未操作时效是否需要使用到定时器? 2.监听用户的行为与时效关系是否建立在onTouch的down、move、up中? 3.场景完善的时候是否考虑生命周期的问题?

实现 自定义CountTimer:用于监听计时过程与结果

注:如需跳转activity、弹出toast可能均需要传入上下文,可以根据场景内部封装application的上下文,或者对应Activity、fragment的上下文 - - ~

package nkwl.com.timescreen; import android.os.CountDownTimer; import android.util.Log; /** * @author MrLiu * @date 2019/11/18 * desc */ public class CountTimer extends CountDownTimer { public CountTimer(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } //计时过程显示:如有需求你可以在特定的时间范围内执行自己操作 @Override public void onTick(long l) { Log.e("tag", l + ""); } //计时完毕时触发:我们的需求中的实现逻辑在这里,一般都逻辑会跳转一个屏保的Activity @Override public void onFinish() { Log.e("tag", "未来某一天,可能依旧拥有无限希望"); } } BaseActivity:用于监听用户行为,处理行为与时间之间的关系

注:此处写在Base类主要针对的全局对象,具体场景根据个人需求而定,如只需要部分场景使用,那么把关键代码抄到对应类即可

package nkwl.com.timescreen; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; /** * @author MrLiu * @date 2019/11/19 * desc */ public class BaseActivity extends AppCompatActivity { private CountTimer countTimerView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); } private void init() { //初始化CountTimer,设置倒计时为2分钟。 countTimerView = new CountTimer(5000, 1000); } private void timeStart() { new Handler(getMainLooper()).post(new Runnable() { @Override public void run() { countTimerView.start(); } }); } /** * 主要的方法,重写dispatchTouchEvent * * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { //获取触摸动作,如果ACTION_UP,计时开始。 case MotionEvent.ACTION_UP: countTimerView.start(); break; //否则其他动作计时取消 default: countTimerView.cancel(); break; } return super.dispatchTouchEvent(ev); } @Override protected void onResume() { super.onResume(); timeStart(); } @Override protected void onPause() { super.onPause(); countTimerView.cancel(); } } MainActivity:使用类(简称:鸡肋展示类;毕竟各位都是聪明人,其实这块我说明与否都一样)

注:如此需求适用全局,那么继承BaseActivity即可

package nkwl.com.timescreen; import android.os.Bundle; public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有