blob: 437648c146ca99eb0d3551259f36d035da44c775 [file] [log] [blame]
/*
* Copyright 2021 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
package org.skia.androidkitdemo1;
import android.app.Activity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import org.skia.androidkit.*;
import org.skia.androidkit.util.*;
class AnimationRenderer extends SurfaceRenderer {
private Shader mLinearGradient,
mRadialGradient,
mConicalGradient,
mSweepGradient;
private ColorFilter mColorFilter = new MatrixColorFilter(new float[]{
0.75f, 0, 0, 0, 0,
0, 1, 0, 0, 0.5f,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0,
});
@Override
protected void onSurfaceInitialized(Surface surface) {
float sw = surface.getWidth(),
sh = surface.getHeight();
float[] colors1 = {
1,0,0,1,
0,1,0,1,
0,0,1,1
};
int[] colors2 = {
0xffffff00,
0xff00ffff,
0xffff00ff
};
float[] pos = {0, 0.5f, 1};
mLinearGradient = new LinearGradient(0, 0, sw/4, 0,
colors1, pos, TileMode.REPEAT);
mRadialGradient = new RadialGradient(sw/2, sh/4, Math.min(sw, sh)/2,
colors2, pos, TileMode.REPEAT);
mConicalGradient = new TwoPointConicalGradient(sw/4, sh/2, sw/4,
sw/2, sh/2, sw/2,
colors1, pos, TileMode.MIRROR);
mSweepGradient = new SweepGradient(sw/2, sh/4, 0, 90, colors2, pos, TileMode.REPEAT);
}
@Override
protected void onRenderFrame(Canvas canvas, long ms) {
final float kWidth = 400,
kHeight = 200,
kSpeed = 4;
canvas.drawColor(0xffffffe0);
float cw = canvas.getWidth(),
ch = canvas.getHeight(),
osc1 = (float)(java.lang.Math.cos(ms * kSpeed / 1000)),
osc2 = (float)(java.lang.Math.sin(ms * kSpeed / 1000));
drawRect(canvas, (1 + osc1)*cw/2, ch/2, mLinearGradient);
drawRect(canvas, (1 - osc1)*cw/2, ch/2, mConicalGradient);
drawRect(canvas, cw/2, (1 + osc2)*ch/2, mRadialGradient);
drawRect(canvas, cw/2, (1 - osc2)*ch/2, mSweepGradient);
}
private void drawRect(Canvas canvas, float cx, float cy, Shader shader) {
final float kWidth = 400,
kHeight = 200;
canvas.drawRect(cx - kWidth/2, cy - kHeight/2, cx + kWidth/2, cy + kHeight/2,
new Paint().setShader(shader).setColorFilter(mColorFilter));
}
}
public class AnimationActivity extends Activity {
static {
System.loadLibrary("androidkit");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation);
SurfaceView sv = findViewById(R.id.surfaceView);
sv.getHolder().addCallback(new AnimationRenderer());
}
}