Eclipse redlines width, height, width, height
в списке doSomething() arg в обратном вызове. Маленький красный X в левом краю; говорит:значения var аргументированы в обратном вызове извне:
Multiple markers at this line
- Cannot refer to a non-final variable height inside an inner class defined in a different
method
- Cannot refer to a non-final variable width inside an inner class defined in a different
method
- Cannot refer to a non-final variable width inside an inner class defined in a different
method
- Cannot refer to a non-final variable height inside an inner class defined in a different
method
Очевидно, что я не хочу тратить циклы, повторяя getWindowManager().getDefaultDisplay()
, чтобы получить эти значения несколько раз внутри holder
обратного вызова или внутри doSomething()
.
Весь этот снайпер находится внутри одного класса.
Спасибо за любую помощь.
...
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
...
final GL10 gl = (GL10) eglContext.getGL();
final Handler handler = new Handler();
SurfaceHolder holder = view.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
int w = 0;
int h = 0;
int x = 0;
int y = 0;
int b[] = new int[w * (y + h)];
int bt[] = new int[w * h];
IntBuffer ib = IntBuffer.wrap(b);
ib.position(0);
gl.glReadPixels(x, 0, w, y + h, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE,ib);
...
holder.addCallback(new Callback() {
private EGLSurface surface;
private Runnable painter;
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
painter = new Runnable() {
@Override
public void run() {
doSomething(width, height, width, height, gl);
}
};
handler.post(painter);
}
}); //Callback ends.
}
private void doSomething(int x, int y, int w, int h, GL10 gl) {
// do something
}
Отлично! Спасибо Ален. – user225626
Это было мое удовольствие :) –