android - 将 MySurfaceView 与 main.xml (android) 一起使用

标签 android surfaceview

我在 android 上有一个简单的程序,它利用用户触摸。

这是主要 Activity :

public class DrawingActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //setContentView(new MySurfaceView(this)); - this way it works, but 
                                          // i'm interseted in previous
}
}

这是 main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.shchurov.MySurfaceView  
android:layout_width="wrap_content" 
android:layout_height="wrap_content"
android:id="@+id/msv" 
/>
</LinearLayout>

这是 MySurfaceView 类:

public class MySurfaceView extends SurfaceView 
            implements SurfaceHolder.Callback {

private SurfaceHolder surfaceHolder;
Canvas canvas=null;
Paint paint=new Paint();


public MySurfaceView(Context context) {
    super(context);
    getHolder().addCallback(this);
    paint.setColor(Color.GREEN);
    paint.setStyle(Style.FILL);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {   
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    this.surfaceHolder=holder;
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}

public boolean onTouchEvent(MotionEvent event)
{
    canvas=surfaceHolder.lockCanvas(null);
    canvas.drawCircle(event.getX(), event.getY(), 10, paint);
    surfaceHolder.unlockCanvasAndPost(canvas);
    return true;
}

}

包是正确的,但由于某种原因它不起作用,任何人都可以帮忙吗?

更新:例如,如果我将 MySurfaceView 更改为此,则它可以工作:

public class MySurfaceView extends View 
{
Paint paint;
public SomeView(Context context, AttributeSet attrs)
{
    super(context, attrs);
    paint = new Paint();
    paint.setColor(Color.YELLOW);
    paint.setStyle(Style.FILL);
}

@Override
protected void onDraw(Canvas canvas)
{
    canvas.drawCircle(20, 20, 20, paint);
}
}

最佳答案

layout_width="fill_parent"

layout_height="fill_parent"

在 surfaceview 标签内,将解决您的问题。

关于android - 将 MySurfaceView 与 main.xml (android) 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149225/

相关文章:

android - Android 中启动前序列动画卡住

Android:如何从 Activity Activity 中关闭前台 Activity ?

android - Amazon Firefly - 将插件添加到应用程序

android - 如何为 Android SurfaceView 找到最佳的 PixelFormat

java - 绘制位图作为 SurfaceView 背景

android - AutoValue 在 Android 项目中找不到生成的构造函数

android - 无法在标题 TextView 上设置辅助功能焦点

java - 如何通过Surfaceview做出标准的游戏设计/布局

android - 将 Android SurfaceView 保存到 Bitmap 并且缺少一些元素

java - 设置位图的旋转和位置