package com.xixun.xixunplayer; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Choreographer; import android.view.View; import java.util.ArrayList; import java.util.HashMap; import gnph.util.Dates; import gnph.util.JSMap; import gnph.util.NumFmts; public class SrcTimer extends View implements Choreographer.FrameCallback { HashMap imgMap = new HashMap<>(); ArrayList imgs = new ArrayList<>(); Bitmap text, day, hour, min, sec; int spaceWidth, len; Paint paint = new Paint(); long targetTime; boolean isDown; boolean isMultiline; boolean hasDay, hasHour, hasMin, hasSec; public SrcTimer(Context context, JSMap json) { super(context); var imgEntrys = json.jsmap("imgs").entrySet(); for(var imgEntry : imgEntrys) imgMap.put(imgEntry.getKey(), BitmapFactory.decodeFile(Util.programDir+"/"+imgEntry.getValue())); text = imgMap.get("text"); day = imgMap.get("day"); hour = imgMap.get("hour"); min = imgMap.get("min"); sec = imgMap.get("sec"); spaceWidth = (int) Math.round(json.dbl("spaceWidth")); isDown = json.bool("isDown"); targetTime = Dates.milli(json.stnn("targetTime")) / 1000; hasDay = json.bool("hasDay"); hasHour = json.bool("hasHour"); hasMin = json.bool("hasMin"); hasSec = json.bool("hasSec"); isMultiline = json.bool("isMultiline"); paint.setTextAlign(Paint.Align.CENTER); try { setBackgroundColor(Color.parseColor(json.stnn("backColor"))); } catch (Exception ignored) {} } void cal() { var cur = System.currentTimeMillis() / 1000; var secs = isDown ? targetTime - cur : cur - targetTime; if(secs < 0) secs = 0; len = 0; imgs.clear(); if(text!=null && ! isMultiline) { imgs.add(text); imgs.add(null); len += text.getWidth(); len += spaceWidth; } if(hasDay) { var str = Long.toString(secs/86400); for(int cc=0; cc