1

私は次の設定をしています:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainView" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:layout_margin="0dp"
    android:gravity="bottom" android:orientation="vertical"
    android:background="@color/yellow_background" android:padding="0dp">

    <!-- There are some components here, but they aren't required to reproduce the bug -->

    <SurfaceView
        android:id="@+id/player" android:focusable="false"
        android:layout_width="match_parent"
        android:layout_height="800dp" />

</LinearLayout> 

そして私のコード(いくつかのビット、さらに情報が必要な場合は質問してください):

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // fullscreen
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

  setContentView(R.layout.main);
  surfaceView = (SurfaceView) this.findViewById(R.id.player);
  surfaceView.setDrawingCacheEnabled(false);
  surfaceHolder = surfaceView.getHolder();
  surfaceHolder.setKeepScreenOn(true);
  surfaceHolder.addCallback(this);
}


public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  canvasWidth = width;
  canvasHeight = height;
}

// lots of code 

結果 : 縁取り画像

問題はsurfaceChanged、800 ではなく 798 の高さ (SurfaceView と同じ値) で呼び出されるのはなぜですか? 2 番目の SurfaceView 内に 2 dp の境界線が表示されますが、これはかなり悪いことです。成功せずにパディングを設定しようとしました。サーフェスビューを透明にする方法によって提供されるソリューションは機能しましたが、少しハックで、アプリの速度が低下します。

(注:実際の画面解像度に対するSurfaceviewのキャンバスのサイズが私のケースに当てはまるとは思わない、とにかくテストしています)

注 2: スクリーンショットは上記の XML を正確に反映したものではありません。これは高さ 500 dp のテストであり、同じ 2 dp の境界線が表示されました。

環境:
- Android エミュレーター (テストするタブレットにアクセスできません)。
- SDK ツール r18/r19;
- MacOS 10.7 の下で;
- デバイスはポートレートモードです (WXGA 解像度、Android 3.2)。

4

0 に答える 0