当SurfaceView类函数的函数定义为空时,它们如何工作?

时间:2014-01-15 12:50:59

标签: android android-canvas

我是android新手。 我正在使用android画布,我想知道当它们的函数defination在android源代码中为空时,SurfaceView类函数是如何工作的。这里是android表面视图类源代码

package android.view;

import com.android.layoutlib.bridge.MockView;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;


public class SurfaceView extends MockView {

public SurfaceView(Context context) {
    this(context, null);
}

public SurfaceView(Context context, AttributeSet attrs) {
    this(context, attrs , 0);
}

public SurfaceView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public SurfaceHolder getHolder() {
    return mSurfaceHolder;
}

private SurfaceHolder mSurfaceHolder = new SurfaceHolder() {

    @Override
    public boolean isCreating() {
        return false;
    }

    @Override
    public void addCallback(Callback callback) {
    }

    @Override
    public void removeCallback(Callback callback) {
    }

    @Override
    public void setFixedSize(int width, int height) {
    }

    @Override
    public void setSizeFromLayout() {
    }

    @Override
    public void setFormat(int format) {
    }

    @Override
    public void setType(int type) {
    }

    @Override
    public void setKeepScreenOn(boolean screenOn) {
    }

    @Override
    public Canvas lockCanvas() {
        return null;
    }

    @Override
    public Canvas lockCanvas(Rect dirty) {
        return null;
    }

    @Override
    public void unlockCanvasAndPost(Canvas canvas) {
    }

    @Override
    public Surface getSurface() {
        return null;
    }

    @Override
    public Rect getSurfaceFrame() {
        return null;
    }
};
}

所以当我们写

时这是如何工作的
canvas c = holder.lockCanvas(null); 

holder.unlockCanvasAndPost(c);

当我们在源代码中没有任何东西要处理时...我的意思是完成工作的代码在哪里。如果帮我找到它..

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

看来您正在查看存根库的源代码。

对于SDK,会生成一个库,其中包含所有公共类,字段和方法的条目,但没有实现。您针对该应用而不是实际库构建应用程序,以便在尝试使用不属于官方Android API的类,字段或方法时构建失败。

如果您查看实际的source for SurfaceView,您会看到setWindowType()(第415行)在javadoc中有@hide的方法。尽管该方法在Java语言意义上是“公共的”,但它不是已发布API的一部分,因此被排除在存根库之外。