为了账号安全,请及时绑定邮箱和手机立即绑定

有个问题,一波表情执行完后,view还在,导致控件不断重绘制

EmotionRainView在一波表情执行完毕后,onDraw一直空绘制,浪费资源。然后由于EmotionRainView全屏布局,没法消失,导致界面遮挡。所以最好是表情雨执行完毕后,自动停止。如下:

将 ondraw方法最后一行 

//重绘
postInvalidate();

改造为:

if(end()){
    LogUtil.i("========运行结束========");
    stopRain();
}else {
    //重绘
    postInvalidate();
    LogUtil.i("=====重绘=======");
}
end()方法如下:
private boolean end(){
    for (int i = 0; i < mEmotionList.size(); i++) {
        Emotion emotion=mEmotionList.get(i);
        if(emotion.getY()<ScreenUtil.getHeight()){
            return false;
        }
    }
    return true;
}

当然,在MainActivity的ondestroy方法中依然要执行停止方法:

@Override
protected void onDestroy() {
    super.onDestroy();
    if(mEmotionView!=null){
        mEmotionView.stopRain();
    }
}


正在回答

2 回答

确实会有问题, 单个表情的时候结束的时候onDraw会进入return的分支, 不在触发postInvalidate方法, 但是多表情的时候每次都会触发postInvalidate, 表情结束之后还在调用onDraw方法。

不过这里实现可以简单一点, 循环绘制每个表情的时候在判断是否超出边界的时候同时检测是不是最后一个表情, 如果是主动stop, 然后return

if (isOutOfBottomBound(i)){
    if (i == emotions.size() - 1){
        stop();
        return;
    }
    continue;
}


0 回复 有任何疑惑可以回复我~

for的条件反复了吧

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
使用ViewPager实现卡片式问答项目(下)
  • 参与学习       3170    人
  • 解答问题       2    个

本门课程将带大家利用ViewPager等技术实现卡片式问答项目下半部分的学习

进入课程

有个问题,一波表情执行完后,view还在,导致控件不断重绘制

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信