2

2 つのタブを持つ TabActivity があります。各タブはインテントに関連付けられています。そして、2 番目のタブにはレイアウトにサーフェスビューがあります,問題に対抗するために,幅 100dip、高さ 100dip の SurfaceView タグを配置するだけで、何もしません。TabActivity の場合読み込まれました,2 番目のタブを押します。その後、画面全体が 1 秒間黒くちらつきます。</p>

さらに、サーフェスに canvas.drawColor(Color.red) を実行させるコードを書きました。黒のちらつきはまだ発生していました。

誰か助けてくれませんか?

これが私のコードです。

タブ アクティビティ

public class TestFlickerAcivity extends TabActivity {

  private TabHost tabHost;

  @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_test_flicker_acivity);
      tabHost = getTabHost();
      createTabs();
    }

  private void createTabs() {
    Intent tab1Intent = new Intent(this, Tab1Activity.class);
    tab1Intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    TabSpec tab1 = tabHost.newTabSpec("TAB1").setIndicator("tab1").setContent(tab1Intent);
    tabHost.addTab(tab1);

    Intent tab2Intent = new Intent(this, Tab2Activity.class);
    tab2Intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    TabSpec tab2 = tabHost.newTabSpec("TAB2").setIndicator("tab2").setContent(tab2Intent);
    tabHost.addTab(tab2);
  }
}

Tab2 レイアウト

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent">

    <SurfaceView android:layout_width="100dip" android:layout_height="100dip"
       android:id="@+id/tab2Surface" />

</RelativeLayout>

Tab2 アクティビティ:

public class Tab2Activity extends Activity implements Callback, Runnable {

  private boolean mIsRunning;
  private SurfaceHolder mHolder;

  @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_tab2);
      SurfaceView sv = (SurfaceView) findViewById(R.id.tab2Surface);
      sv.getHolder().addCallback(this);
    }

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_tab2, menu);
      return true;
    }

  @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {


    }

  @Override
    public void surfaceCreated(SurfaceHolder holder) {
      mHolder = holder;
      Canvas canvas = mHolder.lockCanvas();
      canvas.drawColor(Color.RED);
      mHolder.unlockCanvasAndPost(canvas);
      Thread t = new Thread(this);
      mIsRunning = true;
      t.start();

    }

  @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
      mIsRunning = false;
    }

  @Override
    public void run() {
      while (mIsRunning) {
        Canvas canvas = mHolder.lockCanvas();
        canvas.drawColor(Color.RED);
        mHolder.unlockCanvasAndPost(canvas);
      }
    }
}
4

0 に答える 0