【问题标题】:Why wont the draw() command draw my circle为什么 draw() 命令不能画出我的圆圈
【发布时间】:2016-05-19 10:06:49
【问题描述】:

我想在每次有人触摸屏幕时创建一个球,但我似乎无法让它工作。我希望它在某个位置创建并生成一个球。有一个 if 语句查看屏幕上是否有点击,在 if 语句中它调用下面的 draw 来在窗口中绘制一个圆圈。

package com.example.madusha.gravityball;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;

public class GameWindow extends Activity {
private Paint paint;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game_window);

    Button pause = (Button) findViewById(R.id.pausebutton);
    pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view){
            Intent intent = new Intent(GameWindow.this, PauseMenu.class);
            startActivity(intent);
        }
    });
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
    int Action = event.getAction();
    if(Action == KeyEvent.ACTION_DOWN){
        onDraw();
        System.out.println("Works???");
        return true;
    }
    return super.onKeyDown(keyCode,event);
}
public void init() {
    paint = new Paint();
    paint.setColor(Color.BLUE);
}
Canvas canvas;
public void onDraw(){
    init();
    int height = 100;
    int width = 100;
    canvas.drawCircle(width, height,100,paint);
}
}

【问题讨论】:

  • 我猜这可能是因为您在 Draw() 之后的 if 语句中没有返回 true。
  • 我做到了,但它似乎没有做任何我能看到的事情。

标签: java android android-studio


【解决方案1】:

您需要使用 OnDraw() 函数。这就是在绘制东西时更新画布的原因。

【讨论】:

  • 我该怎么做,我是 android 开发的新手,不知道怎么做或者你的意思。
  • 有一个 OnDraw 方法,实现它,即在里面写你的代码。这个 OnDraw 方法在画布上绘制所有内容。如果您将代码放在任何其他函数中,操作系统将不知道要绘制什么,因此他们给出了 OnDraw 方法
  • 我做了我认为你让我做的事情,但它仍然不起作用,我已经用上面的代码替换了我的旧代码。
【解决方案2】:

画布只能在View 对象内完成,而不是像示例中那样的活动。您可以像这样创建自己的自定义视图 -

public class CustomView extends View {

private Paint paint;

public CompletionSliderView(Context context) {
    super(context);
    init();
}

private void init() {
    paint = new Paint();
    paint.setColor(Color.BLUE);
}

@Override
protected void onDraw(Canvas canvas) {
    int height = getMeasuredHeight();
    int width = getMeasuredWidth();
    canvas.drawCircle(width/2, height/2, height/2, paint);
}

}

要在 xml 布局中使用它,您需要这样做,替换包名称(可能是 com.yourcompany.yourapp)。

<com.yourcompany.yourapp.CustomView
    android:layout_width="64dp"
    android:layout_height="64dp"/>

你可以在代码中创建一个新视图

View circle = new CustomView(getContext());

然后你可以将它添加到你的布局中。

【讨论】:

  • 但是如果我这样做,它是否仍然会在我使用过的活动中产生球
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多