package com.lfk.justweengine.utils.showLogger;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.lfk.justweengine.info.UIdefaultData;
import com.lfk.justweengine.utils.logger.LogLevel;
import com.lfk.justweengine.utils.logger.LogParser;
import com.lfk.justweengine.utils.tools.DisplayUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Created by liufengkai on 16/4/15.
*/
public class LogPrinter {
public static Map<LogLevel, Integer> colorMap = new HashMap<>();
private CopyOnWriteArrayList<LogHandler.Line> logLinesList;
// 多少行弹幕
private int logListSize;
private int left_X;
private int left_Y;
private int line_width;
private Paint textPaint;
static {
colorMap.put(LogLevel.VERBOSE, 0XFF717171);
colorMap.put(LogLevel.DEBUG, 0XFF2980b9);
colorMap.put(LogLevel.INFO, 0XFF27ae60);
colorMap.put(LogLevel.WARN, 0XFFf39c12);
colorMap.put(LogLevel.ERROR, 0XFFc0392b);
colorMap.put(LogLevel.FATAL, 0XFFc0392b);
colorMap.put(LogLevel.ASSERT, 0XFFc0392b);
}
public LogPrinter(int d_time) {
logLinesList = new CopyOnWriteArrayList<>();
init(d_time);
}
private void init(int d_time) {
this.left_X = (int) (DisplayUtils.dip2px(2));
this.left_Y = (int) (DisplayUtils.dip2px(2));
this.textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
this.textPaint.setColor(colorMap.get(LogLevel.VERBOSE));
this.textPaint.setTextSize(20);
float[] widths = new float[1];
textPaint.getTextWidths("H", widths);
this.logListSize =
(int) ((UIdefaultData.screenHeight - DisplayUtils.dip2px(4))
/ widths[0] + DisplayUtils.dip2px(4));
this.line_width = (int) (widths[0] + DisplayUtils.dip2px(2));
Log.e("listX", left_X + " ");
LogHandler.init(new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case LogHandler.LOGCAT:
while (logLinesList.size() >= logListSize)
logLinesList.remove(0);
logLinesList.add((LogHandler.Line) msg.obj);
break;
}
}
}, d_time);
LogHandler.getInstance();
}
public void draw(Canvas engine) {
int index = 0;
for (LogHandler.Line line : logLinesList) {
if (index == logListSize) index = 0;
if (line != null) {
textPaint.setColor(colorMap.get(LogParser.parseLev(line.lev)));
engine.drawText(line.line,
left_X,
left_Y + index * line_width,
textPaint);
index++;
}
}
}
}