SurfaceView上的画布比视图的高度小2dp,为什么?

时间:2012-04-13 17:05:14

标签: android surfaceview android-canvas

我有以下设置:

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 

结果: Image with a border

问题是:为什么调用surfaceChanged的高度为798而不是800(与SurfaceView相同的值)?我在第二个SurfaceView中获得了一个2dp边框,这非常糟糕。试图设置填充没有成功。 how to make surfaceview transparent提供的解决方案有效,但它有点乱,并且减慢了我的应用程序。

(注意:我认为Size of a Canvas in a Surfaceview against real screen resolution不适用于我的情况,我正在测试它

注2:截图并不完全反映上面的XML,它是一个高度为500dp的测试,并且出现了相同的2dp边框。

环境:
- Android模拟器(我无法访问平板电脑进行测试);
- SDK工具r18 / r19;
- 根据MacOS 10.7;
- 设备处于 PORTRAIT 模式(WXGA分辨率,Android 3.2)。

0 个答案:

没有答案