Android的surface类源码深度介绍
发布时间:2021-12-18 16:54:37 所属栏目:PHP教程 来源:互联网
导读:surface用来处理一段单独的缓冲区,这段缓冲区是由屏幕合成器来管理的。 surface 包含安全的内容,使用一些特殊的措施来阻止在其他的进程中复制surface内容。尤其是截屏和VNC服务。surface不能被硬件加速。它创建的缓冲区有几种:BUFFERS,NORMAL,BLUR,DIM
surface用来处理一段单独的缓冲区,这段缓冲区是由屏幕合成器来管理的。 surface 包含安全的内容,使用一些特殊的措施来阻止在其他的进程中复制surface内容。尤其是截屏和VNC服务。surface不能被硬件加速。它创建的缓冲区有几种:BUFFERS,NORMAL,BLUR,DIM。 当surface不能被创建或更改大小时候,系统会抛出异常。surface创建过程中,创建了一个画布,并且在之后的程序设计中我们可以使用。我们可以锁定或解锁一个surface,但解锁时,只有调用post()或postAll() 是才会更新屏幕。 源码: package Android.view; import android.graphics.*; import android.os.Parcelable; import android.os.Parcel; import android.util.Log; public class Surface implements Parcelable { private static final String LOG_TAG = "Surface"; public static final int HIDDEN = 0x00000004; public static final int HARDWARE = 0x00000010; public static final int GPU = 0x00000028; public static final int SECURE = 0x00000080; public static final int NON_PREMULTIPLIED = 0x00000100; public static final int PUSH_BUFFERS = 0x00000200; public static final int FX_SURFACE_NORMAL = 0x00000000; public static final int FX_SURFACE_BLUR = 0x00010000; public static final int FX_SURFACE_DIM = 0x00020000; public static final int FX_SURFACE_MASK = 0x000F0000; public static final int SURFACE_HIDDEN = 0x01; public static final int SURACE_FROZEN = 0x02; public static final int SURFACE_DITHER = 0x04; public static final int SURFACE_BLUR_FREEZE= 0x10; public static final int ROTATION_0 = 0; public static final int ROTATION_90 = 1; public static final int ROTATION_180 = 2; public static final int ROTATION_270 = 3; public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001; @SuppressWarnings("unused") private int mSurface; @SuppressWarnings("unused") private int mSaveCount; @SuppressWarnings("unused") private Canvas mCanvas; /** * Exception thrown when a surface couldn't be created or resized */ public static class OutOfResourcesException extends Exception { public OutOfResourcesException() { } public OutOfResourcesException(String name) { super(name); } } native private static void nativeClassInit(); static { nativeClassInit(); } public Surface(SurfaceSession s, int pid, int display, int w, int h, int format, int flags) throws OutOfResourcesException { mCanvas = new Canvas(); init(s,pid,display,w,h,format,flags); } public Surface() { mCanvas = new Canvas(); } public native void copyFrom(Surface o); public native boolean isValid(); public native void clear(); public Canvas lockCanvas(Rect dirty) throws OutOfResourcesException { return lockCanvasNative(dirty); } private native Canvas lockCanvasNative(Rect dirty); public native void unlockCanvasAndPost(Canvas canvas); public native void unlockCanvas(Canvas canvas); public static native void openTransaction(); public static native void closeTransaction(); public static native void freezeDisplay(int display); public static native void unfreezeDisplay(int display); public static native void setOrientation(int display, int orientation, int flags); public static void setOrientation(int display, int orientation) { setOrientation(display, orientation, 0); } public native void setLayer(int zorder); public native void setPosition(int x, int y); public native void setSize(int w, int h); public native void hide(); public native void show(); public native void setTransparentRegionHint(Region region); public native void setAlpha(float alpha); public native void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); public native void freeze(); public native void unfreeze(); public native void setFreezeTint(int tint); public native void setFlags(int flags, int mask); @Override public String toString() { return "Surface(native-token=" + mSurface + ")"; } private Surface(Parcel source) throws OutOfResourcesException { init(source); } public int describeContents() { return 0; } public native void readFromParcel(Parcel source); public native void writeToParcel(Parcel dest, int flags); public static final Parcelable.Creator<Surface> CREATOR = new Parcelable.Creator<Surface>() { public Surface createFromParcel(Parcel source) { try { return new Surface(source); } catch (Exception e) { Log.e(LOG_TAG, "Exception creating surface from parcel", e); } return null; } public Surface[] newArray(int size) { return new Surface[size]; } }; /* no user serviceable parts here ... */ @Override protected void finalize() throws Throwable { clear(); } private native void init(SurfaceSession s, int pid, int display, int w, int h, int format, int flags) throws OutOfResourcesException; private native void init(Parcel source); } ![]() (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |