Skip to content

Instantly share code, notes, and snippets.

@febinsathar
Created March 2, 2015 17:48
Show Gist options
  • Save febinsathar/b6ff2c7a9bd86d4b8c07 to your computer and use it in GitHub Desktop.
Save febinsathar/b6ff2c7a9bd86d4b8c07 to your computer and use it in GitHub Desktop.
package com.youspot.deadreckoning;
/**
* Created by febinsathar on 02/03/15.
*/
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.SurfaceTexture;
import android.os.Bundle;
import android.view.Gravity;
import android.view.TextureView;
import android.widget.FrameLayout;
@SuppressWarnings({"UnusedDeclaration"})
public class CanvasTextureViewActivity extends Activity
implements TextureView.SurfaceTextureListener {
private TextureView mTextureView;
private CanvasTextureViewActivity.RenderingThread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout content = new FrameLayout(this);
mTextureView = new TextureView(this);
mTextureView.setSurfaceTextureListener(this);
mTextureView.setOpaque(false);
content.addView(mTextureView, new FrameLayout.LayoutParams(500, 500, Gravity.CENTER));
setContentView(content);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mThread = new RenderingThread(mTextureView);
mThread.start();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// Ignored
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
if (mThread != null) mThread.stopRendering();
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
// Ignored
}
private static class RenderingThread extends Thread {
private final TextureView mSurface;
private volatile boolean mRunning = true;
public RenderingThread(TextureView surface) {
mSurface = surface;
}
@Override
public void run() {
float x = 20.0f;
float y = 20.0f;
float speedX = 5.0f;
float speedY = 3.0f;
Paint paint = new Paint();
paint.setColor(0xff00ff00);
final Canvas canvas = mSurface.lockCanvas(null);
try {
canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
canvas.drawRect(x, y, x + 20.0f, y + 20.0f, paint);
} finally {
mSurface.unlockCanvasAndPost(canvas);
}
}
void stopRendering() {
interrupt();
mRunning = false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment