[androidkit] change main activity to be like practical app
Change-Id: Ic12e95eb09ebb40928ba64a26e480a0078bd13c2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/410976
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Jorge Betancourt <jmbetancourt@google.com>
diff --git a/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/MainActivity.java b/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/MainActivity.java
index 21697e5..fedad04 100644
--- a/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/MainActivity.java
+++ b/platform_tools/android/apps/androidkitdemo/src/main/java/org/skia/androidkitdemo1/MainActivity.java
@@ -9,16 +9,20 @@
import android.app.Activity;
import android.graphics.Bitmap;
+import android.graphics.SurfaceTexture;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import android.view.TextureView;
import android.widget.ImageView;
import org.skia.androidkit.*;
+import org.skia.androidkit.util.SurfaceRenderer;
-public class MainActivity extends Activity implements SurfaceHolder.Callback {
- public Surface surfaceSurface;
+public class MainActivity extends Activity {
+ private ImageView bitmapImage;
+ private Surface threadedSurface;
static {
System.loadLibrary("androidkit");
@@ -32,7 +36,11 @@
Paint p = new Paint();
p.setColor(new Color(0, 1, 0, 1));
- // Bitmap
+ /*
+ * Draw into a Java Bitmap through software using Skia's native API.
+ * Load the Bitmap into an ImageView.
+ * Applies Matrix transformations to canvas
+ */
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(400, 400, conf);
Surface bitmapSurface = new Surface(bmp);
@@ -41,9 +49,9 @@
canvas.drawRect(0, 0, 100, 100, p);
float[] m = {1, 0, 0, 100,
- 0, 1, 0, 100,
- 0, 0, 1, 0,
- 0, 0, 0, 1};
+ 0, 1, 0, 100,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1};
p.setColor(new Color(0, 0, 1, 1));
canvas.save();
canvas.concat(m);
@@ -61,28 +69,76 @@
} catch (Exception e) {
Log.e("AndroidKit Demo", "Could not load Image resource: " + R.raw.brickwork_texture);
}
+ bitmapImage = findViewById(R.id.bitmapImage);
+ bitmapImage.setImageBitmap(bmp);
- ImageView image = findViewById(R.id.image);
- image.setImageBitmap(bmp);
+ /*
+ * Draw into a SurfaceView's surface with GL
+ * The ThreadedSurface is handled by AndroidKit through native code
+ */
+ SurfaceView surfaceView = findViewById(R.id.threadedSurface);
+ surfaceView.getHolder().addCallback(new ThreadedSurfaceHandler());
- //Surface
- SurfaceView surfaceView = findViewById(R.id.surface);
- surfaceView.getHolder().addCallback(this);
+ /*
+ * Draw into a SurfaceView's surface with GL
+ * The thread is handled using a util RenderThread provided by AndroidKit
+ */
+ SurfaceView runtimeEffectView = findViewById(R.id.runtimeEffect);
+ runtimeEffectView.getHolder().addCallback(new DemoRuntimeShaderRenderer());
}
- @Override
- public void surfaceCreated(@NonNull SurfaceHolder holder) {
+ private class ThreadedSurfaceHandler implements SurfaceHolder.Callback {
+ @Override
+ public void surfaceCreated(@NonNull SurfaceHolder holder) {}
+
+ @Override
+ public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
+ threadedSurface = Surface.createThreadedSurface(holder.getSurface());
+ threadedSurface.getCanvas().drawColor(0xffffffe0);
+ threadedSurface.flushAndSubmit();
+ }
+
+ @Override
+ public void surfaceDestroyed(@NonNull SurfaceHolder holder) {}
}
- @Override
- public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
- surfaceSurface = Surface.createThreadedSurface(holder.getSurface());
- surfaceSurface.getCanvas().drawColor(0xffffffe0);
- surfaceSurface.flushAndSubmit();
- }
+ class DemoRuntimeShaderRenderer extends SurfaceRenderer {
+ private RuntimeShaderBuilder mBuilder = new RuntimeShaderBuilder(SkSLShader);
- @Override
- public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
+ private static final String SkSLShader =
+ "uniform half u_time; " +
+ "uniform half u_w; " +
+ "uniform half u_h; " +
+ "float f(vec3 p) { " +
+ " p.z -= u_time * 10.; " +
+ " float a = p.z * .1; " +
+ " p.xy *= mat2(cos(a), sin(a), -sin(a), cos(a)); " +
+ " return .1 - length(cos(p.xy) + sin(p.yz)); " +
+ "} " +
+
+ "half4 main(vec2 fragcoord) { " +
+ " vec3 d = .5 - fragcoord.xy1 / u_h; " +
+ " vec3 p=vec3(0); " +
+ " for (int i = 0; i < 32; i++) p += f(p) * d; " +
+ " return ((sin(p) + vec3(2, 5, 9)) / length(p)).xyz1;" +
+ "}";
+
+ @Override
+ protected void onSurfaceInitialized(Surface surface) {}
+
+ @Override
+ protected void onRenderFrame(Canvas canvas, long ms) {
+ final int w = canvas.getWidth();
+ final int h = canvas.getHeight();
+
+ Paint p = new Paint();
+ p.setShader(mBuilder.setUniform("u_time", ms/1000.0f)
+ .setUniform("u_w", w)
+ .setUniform("u_h", h)
+ .makeShader());
+
+ canvas.drawRect(0, 0, w, h, p);
+ }
}
}
diff --git a/platform_tools/android/apps/androidkitdemo/src/main/res/layout/activity_main.xml b/platform_tools/android/apps/androidkitdemo/src/main/res/layout/activity_main.xml
index b42da69..5cb6e85 100644
--- a/platform_tools/android/apps/androidkitdemo/src/main/res/layout/activity_main.xml
+++ b/platform_tools/android/apps/androidkitdemo/src/main/res/layout/activity_main.xml
@@ -6,32 +6,88 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
- <TextView
- android:id="@+id/text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Hello World!"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- <ImageView
- android:id="@+id/image"
- android:layout_width="400px"
- android:layout_height="400px"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintTop_toTopOf="parent">
- </ImageView>
- <SurfaceView
- android:id="@+id/surface"
- android:layout_width="200px"
- android:layout_height="200px"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/image">
- </SurfaceView>
- <org.skia.androidkitdemo1.NavigationSpinner
+ <LinearLayout
+ android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:layout_constraintBottom_toBottomOf="parent">
- </org.skia.androidkitdemo1.NavigationSpinner>
+ android:layout_height="match_parent">
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:id="@+id/skottie_container">
+ <android.support.constraint.ConstraintLayout
+ android:layout_marginTop="50px"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <ImageView
+ android:id="@+id/bitmapImage"
+ android:layout_width="400px"
+ android:layout_height="400px"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ </ImageView>
+ <TextView
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="50px"
+ app:layout_constraintLeft_toRightOf="@+id/bitmapImage"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:text="ImageView populated by bitmap">
+ </TextView>
+ </android.support.constraint.ConstraintLayout>
+
+ <android.support.constraint.ConstraintLayout
+ android:layout_marginTop="50px"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <SurfaceView
+ android:id="@+id/threadedSurface"
+ android:layout_width="400px"
+ android:layout_height="400px"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ </SurfaceView>
+
+ <TextView
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="50px"
+ android:text="SurfaceView drawn on a thread managed by AndroidKit's native code"
+ app:layout_constraintLeft_toRightOf="@+id/threadedSurface"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ </TextView>
+ </android.support.constraint.ConstraintLayout>
+
+
+ <android.support.constraint.ConstraintLayout
+ android:layout_marginTop="50px"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <SurfaceView
+ android:id="@+id/runtimeEffect"
+ android:layout_width="400px"
+ android:layout_height="400px"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ </SurfaceView>
+ <TextView
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="50px"
+ app:layout_constraintLeft_toRightOf="@+id/runtimeEffect"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:text="Runtime effect drawn on a AndroidKit's\nutil thread. GL on Surface View.">
+ </TextView>
+
+ </android.support.constraint.ConstraintLayout>
+ </LinearLayout>
+ </ScrollView>
+ </LinearLayout>
</android.support.constraint.ConstraintLayout>
\ No newline at end of file