2

これはおもちゃの例です。これをコンパイルして (エミュレーターではなく) 実際のデバイスでテストすると、SurfaceView を初めて接続したときに、画面全体のコンテンツが適切に変化することがわかります。ただし、ボタンを押してからもう一度押すと、上部の小さな線が前の画面の青色のままで、サーフェスが作成された後にのみ消えることがわかります。これは、アプリのすべてのビュー (SurfaceView を除く) で発生しており、煩わしいほど気が散っています。誰もこの問題を見たことがありますか? 回避策はありますか? Android 2.1のHTC EVOでこれを実行しています

package com.example.surfaceviewtest;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity {

    private RelativeLayout home;
    private RelativeLayout newView;
    private int view;

    /* (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        home = new RelativeLayout(this);
        home.setBackgroundColor(Color.BLUE);
        Button changeCV = new Button(this);
        changeCV.setText("Change Content View");
        changeCV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setContentView(newView, new RelativeLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
                view = 2;
            }
        });
        RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        buttonParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        home.addView(changeCV, buttonParams);

        newView = new RelativeLayout(this);
        RelativeLayout.LayoutParams surfaceParams = new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT, 200);
    surfaceParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        SurfaceView surfView = new SurfaceView(this);
        newView.addView(surfView, surfaceParams);
        RelativeLayout.LayoutParams tvParams = new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        tvParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        TextView tv = new TextView(this);
        newView.addView(tv, tvParams);

        setContentView(home, new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        view = 1;
    }

     /* (non-Javadoc)
     * @see android.app.Activity#onBackPressed()
     */
    @Override
    public void onBackPressed() {
        if (view == 2) {
            setContentView(home, new RelativeLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            view = 1;
        }
        else {
            finish();
        }
    }   
}
4

0 に答える 0