174 lines
7.1 KiB
Java
174 lines
7.1 KiB
Java
package com.xixun.xixunplayer;
|
|
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Paint;
|
|
import android.graphics.Rect;
|
|
import android.graphics.RectF;
|
|
import android.view.Choreographer;
|
|
import android.view.View;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import gnph.util.JSList;
|
|
import gnph.util.JSMap;
|
|
|
|
public class SrcImage extends View implements Choreographer.FrameCallback {
|
|
|
|
static final char effTypes[] = {'l', 't', 'r', 'b'};
|
|
Bitmap img;
|
|
Rect RECT = new Rect();
|
|
RectF rect;
|
|
Paint paint = new Paint();
|
|
int entryDur, exitStart;
|
|
char entryType, exitType;
|
|
boolean isEntryRand, isExitRand;
|
|
|
|
public SrcImage(Context context, JSMap map, int w, int h) {
|
|
super(context);
|
|
RECT.right = w;
|
|
RECT.bottom = h;
|
|
img = BitmapFactory.decodeFile(Util.programDir+"/"+map.stnn("id"));
|
|
if(img==null) return;
|
|
rect = new RectF(0, 0, w, h);
|
|
// entryDur = map.intg("entryEffectTimeSpan")*60;
|
|
// if(entryDur > 0) {
|
|
// var effStr = map.str("entryEffect");
|
|
// if(effStr == null || effStr.equalsIgnoreCase("None")) entryDur = 0;
|
|
// else if(effStr.equalsIgnoreCase("moving_left")) entryType = 'l';
|
|
// else if(effStr.equalsIgnoreCase("moving_top")) entryType = 't';
|
|
// else if(effStr.equalsIgnoreCase("moving_right")) entryType = 'r';
|
|
// else if(effStr.equalsIgnoreCase("moving_bottom")) entryType = 'b';
|
|
// else if(effStr.equalsIgnoreCase("alpha_in")) entryType = 'a';
|
|
// else if(effStr.equalsIgnoreCase("zoom_in")) entryType = 'z';
|
|
// else if(effStr.equalsIgnoreCase("Random")) isEntryRand = true;
|
|
// else entryDur = 0;
|
|
// }
|
|
// var exitDur = map.intg("exitEffectTimeSpan")*60;
|
|
// if(exitDur > 0) {
|
|
// var effStrExit = map.str("exitEffect");
|
|
// if(effStrExit == null || effStrExit.equalsIgnoreCase("None")) exitDur = 0;
|
|
// else if(effStrExit.equalsIgnoreCase("moving_left")) exitType = 'l';
|
|
// else if(effStrExit.equalsIgnoreCase("moving_top")) exitType = 't';
|
|
// else if(effStrExit.equalsIgnoreCase("moving_right")) exitType = 'r';
|
|
// else if(effStrExit.equalsIgnoreCase("moving_bottom")) exitType = 'b';
|
|
// else if(effStrExit.equalsIgnoreCase("alpha_out")) exitType = 'a';
|
|
// else if(effStrExit.equalsIgnoreCase("zoom_out")) exitType = 'z';
|
|
// else if(effStrExit.equalsIgnoreCase("Random")) isExitRand = true;
|
|
// else exitDur = 0;
|
|
// }
|
|
// exitStart = exitDur==0 ? Integer.MAX_VALUE : map.intg("timeSpan")*60 - exitDur;
|
|
}
|
|
|
|
@Override
|
|
protected void onDraw(Canvas canvas) {
|
|
super.onDraw(canvas);
|
|
drawOther(canvas, this);
|
|
}
|
|
public void drawOther(Canvas canvas, View view) {
|
|
// var fff = ff==0 ? 0 : ff-1;
|
|
// if(fff < entryDur) {
|
|
// if(entryType=='l') {
|
|
// rect.left = RECT.right - fff*RECT.right/(float) entryDur;
|
|
// rect.right = rect.left + RECT.right;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(entryType=='r') {
|
|
// rect.left = -RECT.right + fff*RECT.right/(float) entryDur;
|
|
// rect.right = rect.left + RECT.right;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(entryType=='t') {
|
|
// rect.top = RECT.bottom - fff*RECT.bottom/(float) entryDur;
|
|
// rect.bottom = rect.top + RECT.bottom;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(entryType=='b') {
|
|
// rect.top = -RECT.bottom + fff*RECT.bottom/(float) entryDur;
|
|
// rect.bottom = rect.top + RECT.bottom;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(entryType=='a') {
|
|
// paint.setAlpha(fff*255/entryDur);
|
|
// canvas.drawBitmap(img, null, rect, paint);
|
|
// } else if(entryType=='z') {
|
|
// var haw = RECT.right/2f;
|
|
// var hah = RECT.bottom/2f;
|
|
// var ww = fff*haw/(float) entryDur;
|
|
// var hh = fff*hah/(float) entryDur;
|
|
// rect.left = haw - ww;
|
|
// rect.right = haw + ww;
|
|
// rect.top = hah - hh;
|
|
// rect.bottom = hah + hh;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// }
|
|
// } else if(fff>=exitStart) {
|
|
// fff -= exitStart;
|
|
// if(exitType=='l') {
|
|
// rect.left = - fff*RECT.right/(float) entryDur;
|
|
// rect.right = rect.left + RECT.right;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(exitType=='r') {
|
|
// rect.left = fff*RECT.right/(float) entryDur;
|
|
// rect.right = rect.left + RECT.right;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(exitType=='t') {
|
|
// rect.top = - fff*RECT.bottom/(float) entryDur;
|
|
// rect.bottom = rect.top + RECT.bottom;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(exitType=='b') {
|
|
// rect.top = fff*RECT.bottom/(float) entryDur;
|
|
// rect.bottom = rect.top + RECT.bottom;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// } else if(exitType=='a') {
|
|
// paint.setAlpha(255 - fff*255/entryDur);
|
|
// canvas.drawBitmap(img, null, rect, paint);
|
|
// } else if(exitType=='z') {
|
|
// var haw = RECT.right/2f;
|
|
// var hah = RECT.bottom/2f;
|
|
// var ww = haw - fff*haw/(float) entryDur;
|
|
// var hh = hah - fff*hah/(float) entryDur;
|
|
// rect.left = haw - ww;
|
|
// rect.right = haw + ww;
|
|
// rect.top = hah - hh;
|
|
// rect.bottom = hah + hh;
|
|
// canvas.drawBitmap(img, null, rect, null);
|
|
// }
|
|
// } else
|
|
canvas.drawBitmap(img, null, RECT, null);
|
|
}
|
|
|
|
Choreographer choreographer = Choreographer.getInstance();
|
|
int ff;
|
|
boolean canAdd = true;
|
|
|
|
// @Override
|
|
// public void onVisibilityAggregated(boolean isVisible) {
|
|
// super.onVisibilityAggregated(isVisible);
|
|
// ff = 0;
|
|
// if(isVisible) {
|
|
// if(canAdd && (entryDur > 0 || exitStart < Integer.MAX_VALUE)) {
|
|
// choreographer.postFrameCallback(this);
|
|
// canAdd = false;
|
|
// }
|
|
// }
|
|
// }
|
|
@Override
|
|
public void doFrame(long frameTimeNanos) {
|
|
if(! isShown()) {
|
|
canAdd = true;
|
|
return;
|
|
}
|
|
if(ff <= entryDur || ff>=exitStart) {
|
|
if(ff==0) {
|
|
if(isEntryRand) entryType = effTypes[Util.rand.nextInt(4)];
|
|
if(isExitRand) exitType = effTypes[Util.rand.nextInt(4)];
|
|
}
|
|
invalidate();
|
|
}
|
|
ff++;
|
|
choreographer.postFrameCallback(this);
|
|
canAdd = false;
|
|
}
|
|
} |