安卓 - SurfaceView (宽度,高度) 问题

4

我是新手,正在学习Android开发,遇到了一些问题...

我使用SurfaceView扩展我的类。 在我的类中,我无法获取SurfaceView的宽度和高度。 它总是为0。我想在整个屏幕(surfaceView)上滑动图像,但无法获取其宽度和高度。

有什么建议吗?

这是main.xml中SurfaceView的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <test.MyClass android:id="@+id/SurfaceView01"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
    </test.MyClass>
</LinearLayout>
4个回答

6

5

我曾尝试过类似的事情,并在此线程上发布了帖子 Android: UI elements over canvas layer

除了以上内容,您还需要获取高度和宽度。

public void onDraw(Canvas canvas)
{
    this.canvas = canvas;

    if (!oneTime)
    {
        oneTime = true;
        screenWidth = getWidth();
        screenHeight = getHeight();
        Bitmap red = BitmapFactory.decodeResource(getResources(), R.drawable.image);
        red = Bitmap.createScaledBitmap(red, screenWidth , screenHeight , true);
    }
}

如果您不想在OnDraw中拉取代码,可以尝试以下代码

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenHeight = metrics.heightPixels;
int screenWidth = metrics.widthPixels;

但是这将会给你整个可见区域的宽度和高度。

这有点晚了。在进入onDraw方法之前,我正在创建一个图片。我需要用指定的宽度和高度来创建这个图片。之后,我在图片的图形上渲染一些东西,在onDraw方法中,我只需使用canvas.drawBitmap(image.getBitmap(), 0, 0, null)来绘制图片。 - no9
为什么不能在 onDraw() 方法中创建图像? - ingsaurabh
习惯于j2Me onPaint ... 不是吗? :) - no9
我已经编辑了代码,你可以尝试一下,这样你的图像就不会在每次调用ondraw时创建。 - ingsaurabh
嗯,我试图避免在onDraw中实现渲染。我有10行代码来渲染图像图形。把所有这些放到onDraw里面似乎不太对...我会尝试一下,虽然我不喜欢无法从onDraw方法外获取SurfaceView的宽度和高度这个事实... - no9
1
我偶然发现了那段代码,但是在我扩展SurfaceView的类中无法识别getWindowManager()方法。 - no9

3

我发现的解决方法是,在启动线程后,在我的SurafaceCreated方法中使用getHeight()和getWidth()。这使我能够在任何更新或绘制发生之前就拥有了Surface视图的高度和宽度。


2
使用 surfaceView.getHolder().getSurfaceFrame() 来获取大小的 Rect 对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接