私はアンドロイド2.3用にコーディングしています。
私はこのプログラムを書きました。(0,0) から (99,99) までの長さ 100 ピクセルの白い対角線を描画します。
バグがあります: コードは、最初の実行時にのみ画面を正しく描画します。
その後毎回、2 本の短い対角線が描画されます。緑がかった黄色の線と青い線。
各線は、正しい長さの約半分で表示されます。
緑がかった黄色の線は (0,0) から始まるように見えますが、青い線は (200,0) 付近から始まるように見えます
コードが実行されるたびに、ANativeWindow_Buffer.formatが異なる可能性があることに気付きました。それが関連しているかどうかはわかりません。
何が起こっているのか誰にも分かりませんか?
助けてくれてありがとう
#include <android/log.h>
#include <android_native_app_glue.h>
ANativeWindow_Buffer buffer;
void Out( int x, int y ) {
uint16_t * pPixel = buffer.bits;
/* Compute correct x,y */
pPixel += ( x + ( y * buffer.stride ) );
/* put a white pixel there */
*pPixel = -1;
}
void drawscreen( struct android_app * app ) {
unsigned u;
for ( u = 0; u < 100; u++ ) {
Out( u, u );
}
}
static void android_handle_cmd( struct android_app * app, int32_t cmd ) {
switch ( cmd ) {
case APP_CMD_INIT_WINDOW:
// The window is being shown.
if ( NULL == app->window ) {
return;
}
if ( 0 > ANativeWindow_lock( app->window, &buffer, NULL ) ) {
return;
}
drawscreen( app );
ANativeWindow_unlockAndPost( app->window );
break;
}
}
void android_main( struct android_app * app ) {
app_dummy();
app->onAppCmd = android_handle_cmd;
for ( ;; ) {
int events;
int iRet;
struct android_poll_source * source;
iRet = ALooper_pollAll( -1, NULL, &events, (void**)&source );
if ( NULL != source ) {
source->process( app, source );
continue;
}
}
}