Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 = 0.0f;
- float y = 0.0f;
- float speedX = 5.0f;
- float speedY = 3.0f;
- Paint paint = new Paint();
- paint.setColor(0xff00ff00);
- while (mRunning && !Thread.interrupted()) {
- 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);
- }
- if (x + 20.0f + speedX >= mSurface.getWidth() || x + speedX <= 0.0f) {
- speedX = -speedX;
- }
- if (y + 20.0f + speedY >= mSurface.getHeight() || y + speedY <= 0.0f) {
- speedY = -speedY;
- }
- x += speedX;
- y += speedY;
- try {
- Thread.sleep(15);
- } catch (InterruptedException e) {
- // Interrupted
- }
- }
- }
- void stopRendering() {
- interrupt();
- mRunning = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement