Loading api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -21566,8 +21566,12 @@ package android.view { ctor public TextureView(android.content.Context, android.util.AttributeSet); ctor public TextureView(android.content.Context, android.util.AttributeSet, int); method public final void draw(android.graphics.Canvas); method public android.graphics.Bitmap getBitmap(); method public android.graphics.Bitmap getBitmap(int, int); method public android.graphics.Bitmap getBitmap(android.graphics.Bitmap); method public android.graphics.SurfaceTexture getSurfaceTexture(); method public android.view.TextureView.SurfaceTextureListener getSurfaceTextureListener(); method public boolean isAvailable(); method protected final void onDraw(android.graphics.Canvas); method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener); } core/java/android/view/GLES20Canvas.java +1 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,7 @@ class GLES20Canvas extends HardwareCanvas { static native void nUpdateTextureLayer(int layerId, int width, int height, int surface); static native void nDestroyLayer(int layerId); static native void nDestroyLayerDeferred(int layerId); static native boolean nCopyLayer(int layerId, int bitmap); /////////////////////////////////////////////////////////////////////////// // Canvas management Loading core/java/android/view/GLES20Layer.java +6 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.view; import android.graphics.Bitmap; /** * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. */ Loading @@ -40,6 +42,9 @@ abstract class GLES20Layer extends HardwareLayer { return mLayer; } boolean copyInto(Bitmap bitmap) { return GLES20Canvas.nCopyLayer(mLayer, bitmap.mNativeBitmap); } @Override void destroy() { Loading core/java/android/view/HardwareRenderer.java +18 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.view; import android.graphics.Bitmap; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.SurfaceTexture; Loading Loading @@ -206,6 +207,16 @@ public abstract class HardwareRenderer { abstract void updateTextureLayer(HardwareLayer layer, int width, int height, SurfaceTexture surface); /** * Copies the content of the specified layer into the specified bitmap. * * @param layer The hardware layer to copy * @param bitmap The bitmap to copy the layer into * * @return True if the copy was successful, false otherwise */ abstract boolean copyLayer(HardwareLayer layer, Bitmap bitmap); /** * Initializes the hardware renderer for the specified surface and setup the * renderer for drawing, if needed. This is invoked when the ViewAncestor has Loading Loading @@ -814,6 +825,11 @@ public abstract class HardwareRenderer { ((GLES20TextureLayer) layer).update(width, height, surface.mSurfaceTexture); } @Override boolean copyLayer(HardwareLayer layer, Bitmap bitmap) { return ((GLES20Layer) layer).copyInto(bitmap); } static HardwareRenderer create(boolean translucent) { if (GLES20Canvas.isAvailable()) { return new Gl20Renderer(translucent); Loading core/java/android/view/TextureView.java +92 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.SurfaceTexture; Loading Loading @@ -89,6 +90,8 @@ import android.util.Log; * @see SurfaceTexture */ public class TextureView extends View { private static final String LOG_TAG = "TextureView"; private HardwareLayer mLayer; private SurfaceTexture mSurface; private SurfaceTextureListener mListener; Loading Loading @@ -148,7 +151,7 @@ public class TextureView extends View { super.onAttachedToWindow(); if (!isHardwareAccelerated()) { Log.w("TextureView", "A TextureView or a subclass can only be " Log.w(LOG_TAG, "A TextureView or a subclass can only be " + "used with hardware acceleration enabled."); } } Loading Loading @@ -292,9 +295,96 @@ public class TextureView extends View { invalidate(); } /** * <p>Returns a {@link android.graphics.Bitmap} representation of the content * of the associated surface texture. If the surface texture is not available, * this method returns null.</p> * * <p>The bitmap returned by this method uses the {@link Bitmap.Config#ARGB_8888} * pixel format and its dimensions are the same as this view's.</p> * * <p><strong>Do not</strong> invoke this method from a drawing method * ({@link #onDraw(android.graphics.Canvas)} for instance).</p> * * @return A valid {@link Bitmap.Config#ARGB_8888} bitmap, or null if the surface * texture is not available or the width <= 0 or the height <= 0 * * @see #isAvailable() * @see #getBitmap(android.graphics.Bitmap) * @see #getBitmap(int, int) */ public Bitmap getBitmap() { return getBitmap(getWidth(), getHeight()); } /** * <p>Returns a {@link android.graphics.Bitmap} representation of the content * of the associated surface texture. If the surface texture is not available, * this method returns null.</p> * * <p>The bitmap returned by this method uses the {@link Bitmap.Config#ARGB_8888} * pixel format.</p> * * <p><strong>Do not</strong> invoke this method from a drawing method * ({@link #onDraw(android.graphics.Canvas)} for instance).</p> * * @param width The width of the bitmap to create * @param height The height of the bitmap to create * * @return A valid {@link Bitmap.Config#ARGB_8888} bitmap, or null if the surface * texture is not available or width is <= 0 or height is <= 0 * * @see #isAvailable() * @see #getBitmap(android.graphics.Bitmap) * @see #getBitmap() */ public Bitmap getBitmap(int width, int height) { if (isAvailable() && width > 0 && height > 0) { return getBitmap(Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)); } return null; } /** * <p>Copies the content of this view's surface texture into the specified * bitmap. If the surface texture is not available, the copy is not executed. * The content of the surface texture will be scaled to fit exactly inside * the specified bitmap.</p> * * <p><strong>Do not</strong> invoke this method from a drawing method * ({@link #onDraw(android.graphics.Canvas)} for instance).</p> * * @param bitmap The bitmap to copy the content of the surface texture into, * cannot be null, all configurations are supported * * @return The bitmap specified as a parameter * * @see #isAvailable() * @see #getBitmap(int, int) * @see #getBitmap() */ public Bitmap getBitmap(Bitmap bitmap) { if (bitmap != null && isAvailable()) { mAttachInfo.mHardwareRenderer.copyLayer(mLayer, bitmap); } return bitmap; } /** * Returns true if the {@link SurfaceTexture} associated with this * TextureView is available for rendering. When this method returns * true, {@link #getSurfaceTexture()} returns a valid surface texture. */ public boolean isAvailable() { return mSurface != null; } /** * Returns the {@link SurfaceTexture} used by this view. This method * may return null if the view is not attached to a window. * may return null if the view is not attached to a window or if the surface * texture has not been initialized yet. * * @see #isAvailable() */ public SurfaceTexture getSurfaceTexture() { return mSurface; Loading Loading
api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -21566,8 +21566,12 @@ package android.view { ctor public TextureView(android.content.Context, android.util.AttributeSet); ctor public TextureView(android.content.Context, android.util.AttributeSet, int); method public final void draw(android.graphics.Canvas); method public android.graphics.Bitmap getBitmap(); method public android.graphics.Bitmap getBitmap(int, int); method public android.graphics.Bitmap getBitmap(android.graphics.Bitmap); method public android.graphics.SurfaceTexture getSurfaceTexture(); method public android.view.TextureView.SurfaceTextureListener getSurfaceTextureListener(); method public boolean isAvailable(); method protected final void onDraw(android.graphics.Canvas); method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener); }
core/java/android/view/GLES20Canvas.java +1 −0 Original line number Diff line number Diff line Loading @@ -166,6 +166,7 @@ class GLES20Canvas extends HardwareCanvas { static native void nUpdateTextureLayer(int layerId, int width, int height, int surface); static native void nDestroyLayer(int layerId); static native void nDestroyLayerDeferred(int layerId); static native boolean nCopyLayer(int layerId, int bitmap); /////////////////////////////////////////////////////////////////////////// // Canvas management Loading
core/java/android/view/GLES20Layer.java +6 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.view; import android.graphics.Bitmap; /** * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. */ Loading @@ -40,6 +42,9 @@ abstract class GLES20Layer extends HardwareLayer { return mLayer; } boolean copyInto(Bitmap bitmap) { return GLES20Canvas.nCopyLayer(mLayer, bitmap.mNativeBitmap); } @Override void destroy() { Loading
core/java/android/view/HardwareRenderer.java +18 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.view; import android.graphics.Bitmap; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.SurfaceTexture; Loading Loading @@ -206,6 +207,16 @@ public abstract class HardwareRenderer { abstract void updateTextureLayer(HardwareLayer layer, int width, int height, SurfaceTexture surface); /** * Copies the content of the specified layer into the specified bitmap. * * @param layer The hardware layer to copy * @param bitmap The bitmap to copy the layer into * * @return True if the copy was successful, false otherwise */ abstract boolean copyLayer(HardwareLayer layer, Bitmap bitmap); /** * Initializes the hardware renderer for the specified surface and setup the * renderer for drawing, if needed. This is invoked when the ViewAncestor has Loading Loading @@ -814,6 +825,11 @@ public abstract class HardwareRenderer { ((GLES20TextureLayer) layer).update(width, height, surface.mSurfaceTexture); } @Override boolean copyLayer(HardwareLayer layer, Bitmap bitmap) { return ((GLES20Layer) layer).copyInto(bitmap); } static HardwareRenderer create(boolean translucent) { if (GLES20Canvas.isAvailable()) { return new Gl20Renderer(translucent); Loading
core/java/android/view/TextureView.java +92 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.SurfaceTexture; Loading Loading @@ -89,6 +90,8 @@ import android.util.Log; * @see SurfaceTexture */ public class TextureView extends View { private static final String LOG_TAG = "TextureView"; private HardwareLayer mLayer; private SurfaceTexture mSurface; private SurfaceTextureListener mListener; Loading Loading @@ -148,7 +151,7 @@ public class TextureView extends View { super.onAttachedToWindow(); if (!isHardwareAccelerated()) { Log.w("TextureView", "A TextureView or a subclass can only be " Log.w(LOG_TAG, "A TextureView or a subclass can only be " + "used with hardware acceleration enabled."); } } Loading Loading @@ -292,9 +295,96 @@ public class TextureView extends View { invalidate(); } /** * <p>Returns a {@link android.graphics.Bitmap} representation of the content * of the associated surface texture. If the surface texture is not available, * this method returns null.</p> * * <p>The bitmap returned by this method uses the {@link Bitmap.Config#ARGB_8888} * pixel format and its dimensions are the same as this view's.</p> * * <p><strong>Do not</strong> invoke this method from a drawing method * ({@link #onDraw(android.graphics.Canvas)} for instance).</p> * * @return A valid {@link Bitmap.Config#ARGB_8888} bitmap, or null if the surface * texture is not available or the width <= 0 or the height <= 0 * * @see #isAvailable() * @see #getBitmap(android.graphics.Bitmap) * @see #getBitmap(int, int) */ public Bitmap getBitmap() { return getBitmap(getWidth(), getHeight()); } /** * <p>Returns a {@link android.graphics.Bitmap} representation of the content * of the associated surface texture. If the surface texture is not available, * this method returns null.</p> * * <p>The bitmap returned by this method uses the {@link Bitmap.Config#ARGB_8888} * pixel format.</p> * * <p><strong>Do not</strong> invoke this method from a drawing method * ({@link #onDraw(android.graphics.Canvas)} for instance).</p> * * @param width The width of the bitmap to create * @param height The height of the bitmap to create * * @return A valid {@link Bitmap.Config#ARGB_8888} bitmap, or null if the surface * texture is not available or width is <= 0 or height is <= 0 * * @see #isAvailable() * @see #getBitmap(android.graphics.Bitmap) * @see #getBitmap() */ public Bitmap getBitmap(int width, int height) { if (isAvailable() && width > 0 && height > 0) { return getBitmap(Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)); } return null; } /** * <p>Copies the content of this view's surface texture into the specified * bitmap. If the surface texture is not available, the copy is not executed. * The content of the surface texture will be scaled to fit exactly inside * the specified bitmap.</p> * * <p><strong>Do not</strong> invoke this method from a drawing method * ({@link #onDraw(android.graphics.Canvas)} for instance).</p> * * @param bitmap The bitmap to copy the content of the surface texture into, * cannot be null, all configurations are supported * * @return The bitmap specified as a parameter * * @see #isAvailable() * @see #getBitmap(int, int) * @see #getBitmap() */ public Bitmap getBitmap(Bitmap bitmap) { if (bitmap != null && isAvailable()) { mAttachInfo.mHardwareRenderer.copyLayer(mLayer, bitmap); } return bitmap; } /** * Returns true if the {@link SurfaceTexture} associated with this * TextureView is available for rendering. When this method returns * true, {@link #getSurfaceTexture()} returns a valid surface texture. */ public boolean isAvailable() { return mSurface != null; } /** * Returns the {@link SurfaceTexture} used by this view. This method * may return null if the view is not attached to a window. * may return null if the view is not attached to a window or if the surface * texture has not been initialized yet. * * @see #isAvailable() */ public SurfaceTexture getSurfaceTexture() { return mSurface; Loading