package com.xixun.xixunplayer; import android.annotation.SuppressLint; import android.content.Context; import android.net.Uri; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import java.io.File; import java.util.ArrayList; import gnph.util.JSList; import gnph.util.JSMap; import pl.droidsonroids.gif.GifImageView; @SuppressLint("ViewConstructor") public class ProgView extends AbsLayout { ArrayList pages = new ArrayList<>(); public ProgView(JSMap task, Context context) { super(context); JSList jpages = task.jslist("items"); for(var pageMap : jpages) { var _program = pageMap.jsmap("_program"); JSList layers = _program.jslist("layers"); if(layers.isEmpty()) continue; JSList splitWidths = _program.jslist("splitWidths"); var page = new Page(); page.repeatTimes = pageMap.intg("repeatTimes"); page.parse(pageMap.jslist("schedules")); for(int ll=layers.size()-1; ll>=0; ll--) { var layer = new Page.Layer(); layer.isLoop = layers.get(ll).bool("repeat"); JSList sources = layers.get(ll).jslist("sources"); var border = layers.get(ll).jsmap("border"); EleBorder bdEle = null; int bdWidth = 0, bdStart = 0xffff, bdEnd = 0; if(border!=null) { bdEle = new EleBorder(Util.programDir+"/"+border.stnn("img"), border.stnn("eff"), border.intg("speed"), context); bdWidth = bdEle.img.getHeight(); } var ele = new Page.EleBase(); int x, y, w, h; for(var source : sources) { ele.type = source.stnn("_type"); if(ele.type.isEmpty()) continue; var timeSpan = source.intg("timeSpan")*1000; if(timeSpan==0) continue; x = source.intg("left")+bdWidth; y = source.intg("top")+bdWidth; w = source.intg("width")-bdWidth-bdWidth; h = source.intg("height")-bdWidth-bdWidth; boolean notAudio = ! ele.type.equals("Audio"); if((w<=0 || h<=0) && notAudio) continue; ele.startTime = source.intg("playTime")*1000; if(bdStart > ele.startTime) bdStart = ele.startTime; ele.endTime = ele.startTime + timeSpan; if(bdEnd < ele.endTime) bdEnd = ele.endTime; if(layer.dur < ele.endTime) layer.dur = ele.endTime; if(page.dur < ele.endTime && notAudio) page.dur = ele.endTime; ele.id = source.stnn("id"); ele.view = null; if(ele.type.equals("Image")) { ImageView imgView = source.stnn("fileExt").equalsIgnoreCase("gif") ? new GifImageView(context) : new ImageView(context); imgView.setImageURI(Uri.fromFile(new File(Util.programDir+"/"+ele.id))); imgView.setScaleType(ImageView.ScaleType.FIT_XY); ele.view = imgView; } else if(ele.type.equals("MultiPng")) { JSList imgs = source.jslist("arrayPics"); if(imgs.isEmpty()) continue; if(imgs.size()==1 && imgs.get(0).intg("picDuration")==0) ele.view = new EleScroll(Util.programDir+"/", imgs.get(0), context); else ele.view = new EleFlip(Util.programDir+"/", imgs, context); } else if(ele.type.equals("SplitText")) { JSList imgs = source.jslist("arrayPics"); if(imgs.isEmpty()) continue; ele.view = new AbsLayout(context); var partHeight = _program.intg("height"); if(imgs.size()==1 && imgs.get(0).intg("picDuration")==0) { var view = new EleScroll(Util.programDir+"/", imgs.get(0), context); ((AbsLayout) ele.view).addView(view, new AbsLayout.LayoutParams(x, y, splitWidths.get(0).intValue(), h)); view.others = new ArrayList<>(); for(int i=1; i(); for(int i=1; i 0) ele.view.setLayoutParams(new AbsLayout.LayoutParams(x, y, w, h)); ele.view.setVisibility(GONE); addView(ele.view); layer.eles.add(ele); ele = new Page.EleBase(); } if(bdEle!=null && ! sources.isEmpty()) { JSList geometry = border.jslist("geometry"); x = geometry.get(0).intValue(); y = geometry.get(1).intValue(); w = geometry.get(2).intValue(); h = geometry.get(3).intValue(); ele.startTime = bdStart; ele.endTime = bdEnd; ele.view = bdEle; ele.view.setVisibility(GONE); addView(ele.view, new AbsLayout.LayoutParams(x, y, w, h)); layer.eles.add(ele); } if(! layer.eles.isEmpty()) page.layers.add(layer); } if(page.dur==0) continue; for_layer: for(int ll=0; ll= page.dur) { if(layer.eles.size() > 1) layer.eles.remove(ee--); else { page.layers.remove(ll--); continue for_layer; } } else if(ele.endTime > page.dur) ele.endTime = page.dur; } if(layer.dur > page.dur) layer.dur = page.dur; if(layer.dur == page.dur) layer.isLoop = false; } pages.add(page); } } }