Java Code Examples for android.view.Surface#unlockCanvasAndPost()

The following examples show how to use android.view.Surface#unlockCanvasAndPost() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FastPathSurfaceView.java    From walt with Apache License 2.0 6 votes vote down vote up
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    Surface surface = holder.getSurface();
    if (surface == null)
        return;

    try {
        Method setSharedBufferMode = Surface.class.getMethod("setSharedBufferMode", boolean.class);
        setSharedBufferMode.invoke(surface, true);
        displayMessage("Using shared buffer mode.");
    } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
        displayMessage("Shared buffer mode is not supported.");
    }
    Canvas canvas = surface.lockCanvas(null);
    canvas.drawColor(Color.GRAY);
    surface.unlockCanvasAndPost(canvas);
}
 
Example 2
Source File: MultiSurfaceActivity.java    From pause-resume-video-recording with Apache License 2.0 6 votes vote down vote up
/**
 * Clears the surface, then draws a filled circle with a shadow.
 * <p>
 * The Canvas drawing we're doing may not be fully implemented for hardware-accelerated
 * renderers (shadow layers only supported for text).  However, Surface#lockCanvas()
 * currently only returns an unaccelerated Canvas, so it all comes out looking fine.
 */
private void drawCircleSurface(Surface surface, int x, int y, int radius) {
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.FILL);
    paint.setShadowLayer(radius / 4 + 1, 0, 0, Color.RED);

    Canvas canvas = surface.lockCanvas(null);
    try {
        Log.v(TAG, "drawCircleSurface: isHwAcc=" + canvas.isHardwareAccelerated());
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        canvas.drawCircle(x, y, radius, paint);
    } finally {
        surface.unlockCanvasAndPost(canvas);
    }
}
 
Example 3
Source File: MultiSurfaceActivity.java    From grafika with Apache License 2.0 6 votes vote down vote up
/**
 * Clears the surface, then draws a filled circle with a shadow.
 * <p>
 * The Canvas drawing we're doing may not be fully implemented for hardware-accelerated
 * renderers (shadow layers only supported for text).  However, Surface#lockCanvas()
 * currently only returns an unaccelerated Canvas, so it all comes out looking fine.
 */
private void drawCircleSurface(Surface surface, int x, int y, int radius) {
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.FILL);
    paint.setShadowLayer(radius / 4 + 1, 0, 0, Color.RED);

    Canvas canvas = surface.lockCanvas(null);
    try {
        Log.v(TAG, "drawCircleSurface: isHwAcc=" + canvas.isHardwareAccelerated());
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        canvas.drawCircle(x, y, radius, paint);
    } finally {
        surface.unlockCanvasAndPost(canvas);
    }
}
 
Example 4
Source File: ImageView.java    From Spectaculum with Apache License 2.0 5 votes vote down vote up
private void tryLoadBitmap() {
    if(mBitmap != null && getInputHolder().getSurface() != null) {
        SurfaceTexture st = getInputHolder().getSurfaceTexture();
        Surface s = getInputHolder().getSurface();

        // First set the texture resolution
        st.setDefaultBufferSize(mBitmap.getWidth(), mBitmap.getHeight());

        // Then draw the image data
        Canvas c = s.lockCanvas(null);
        c.drawBitmap(mBitmap, 0, 0, null);
        s.unlockCanvasAndPost(c);
    }
}
 
Example 5
Source File: FastPathSurfaceView.java    From walt with Apache License 2.0 5 votes vote down vote up
public void setRectColor(int color) {
    Surface surface = getHolder().getSurface();
    if (surface == null || !isActive)
        return;
    Rect rect = new Rect(10, 10, 310, 310);
    Canvas canvas = surface.lockCanvas(rect);
    Paint paint = new Paint();
    paint.setColor(color);
    canvas.drawRect(rect, paint);
    surface.unlockCanvasAndPost(canvas);
}
 
Example 6
Source File: MultiSurfaceActivity.java    From pause-resume-video-recording with Apache License 2.0 5 votes vote down vote up
/**
 * Clears the surface, then draws a filled circle with a shadow.
 * <p>
 * Similar to drawCircleSurface(), but the position changes based on the value of "i".
 */
private void drawBouncingCircle(Surface surface, int i) {
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.FILL);

    Canvas canvas = surface.lockCanvas(null);
    try {
        Trace.beginSection("drawBouncingCircle");
        Trace.beginSection("drawColor");
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        Trace.endSection(); // drawColor

        int width = canvas.getWidth();
        int height = canvas.getHeight();
        int radius, x, y;
        if (width < height) {
            // portrait
            radius = width / 4;
            x = width / 4 + ((width / 2 * i) / BOUNCE_STEPS);
            y = height * 3 / 4;
        } else {
            // landscape
            radius = height / 4;
            x = width * 3 / 4;
            y = height / 4 + ((height / 2 * i) / BOUNCE_STEPS);
        }

        paint.setShadowLayer(radius / 4 + 1, 0, 0, Color.RED);

        canvas.drawCircle(x, y, radius, paint);
        Trace.endSection(); // drawBouncingCircle
    } finally {
        surface.unlockCanvasAndPost(canvas);
    }
}
 
Example 7
Source File: MultiSurfaceActivity.java    From grafika with Apache License 2.0 5 votes vote down vote up
/**
 * Clears the surface, then draws a filled circle with a shadow.
 * <p>
 * Similar to drawCircleSurface(), but the position changes based on the value of "i".
 */
private void drawBouncingCircle(Surface surface, int i) {
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.FILL);

    Canvas canvas = surface.lockCanvas(null);
    try {
        Trace.beginSection("drawBouncingCircle");
        Trace.beginSection("drawColor");
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        Trace.endSection(); // drawColor

        int width = canvas.getWidth();
        int height = canvas.getHeight();
        int radius, x, y;
        if (width < height) {
            // portrait
            radius = width / 4;
            x = width / 4 + ((width / 2 * i) / BOUNCE_STEPS);
            y = height * 3 / 4;
        } else {
            // landscape
            radius = height / 4;
            x = width * 3 / 4;
            y = height / 4 + ((height / 2 * i) / BOUNCE_STEPS);
        }

        paint.setShadowLayer(radius / 4 + 1, 0, 0, Color.RED);

        canvas.drawCircle(x, y, radius, paint);
        Trace.endSection(); // drawBouncingCircle
    } finally {
        surface.unlockCanvasAndPost(canvas);
    }
}
 
Example 8
Source File: PlaceholderDrawingSurfaceTextureListener.java    From sketch with Apache License 2.0 5 votes vote down vote up
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
	final Surface surface = new Surface(surfaceTexture);
	final Canvas canvas = surface.lockCanvas(null);
	mDrawer.onDrawPlaceholder(canvas);
	surface.unlockCanvasAndPost(canvas);
	surface.release();
}
 
Example 9
Source File: ColorBarActivity.java    From grafika with Apache License 2.0 4 votes vote down vote up
/**
 * Draw color bars with text labels.
 */
private void drawColorBars(Surface surface) {
    Canvas canvas = surface.lockCanvas(null);
    try {
        // TODO: if the device is in portrait, draw the color bars horizontally.  Right
        // now this only looks good in landscape.
        int width = canvas.getWidth();
        int height = canvas.getHeight();
        int least = Math.min(width, height);

        Log.d(TAG, "Drawing color bars at " + width + "x" + height);

        Paint textPaint = new Paint();
        Typeface typeface = Typeface.defaultFromStyle(Typeface.NORMAL);
        textPaint.setTypeface(typeface);
        textPaint.setTextSize(least / 20);
        textPaint.setAntiAlias(true);

        Paint rectPaint = new Paint();
        for (int i = 0; i < 8; i++) {
            int color = 0xff000000;
            if ((i & 0x01) != 0) {
                color |= 0x00ff0000;
            }
            if ((i & 0x02) != 0) {
                color |= 0x0000ff00;
            }
            if ((i & 0x04) != 0) {
                color |= 0x000000ff;
            }
            rectPaint.setColor(color);

            float sliceWidth = width / 8;
            canvas.drawRect(sliceWidth * i, 0, sliceWidth * (i+1), height, rectPaint);
        }
        rectPaint.setColor(0x80808080);     // ARGB 50/50 grey (non-premul)
        float sliceHeight = height / 8;
        int posn = 6;
        canvas.drawRect(0, sliceHeight * posn, width, sliceHeight * (posn+1), rectPaint);

        // Draw the labels last so they're on top of everything.
        for (int i = 0; i < 8; i++) {
            drawOutlineText(canvas, textPaint, COLOR_NAMES[i],
                    (width / 8) * i + 4, (height / 8) * ((i & 1) + 1));
        }
    } finally {
        surface.unlockCanvasAndPost(canvas);
    }
}