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