加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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);
}

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读