我正在制作一个Android应用程序,只是为了测试自己。我正在尝试使用canvas绘制位图图像,但为什么它不起作用?它只是在启动后第二次关闭,没有任何例外。
这是我目前使用的代码:
package com.mysoftwaremobileapps.BitmapExample;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
public class BitmapExampleActivity extends Activity {
/** Called when the activity is first created. */
private ArrayList<CustomImageViewActivity> CustomImages;
Bitmap ImageView1;
float x;
float y;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Canvas c = new Canvas();
drawImage(c);
}
public void doDraw(Canvas canvas)
{
for (CustomImageViewActivity p: CustomImages) {
canvas.drawBitmap(ImageView1, p.getX(), p.getY(), null);
}
}
public void drawImage(Canvas canvas)
{
ImageView1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Paint black;
black = new Paint();
black.setStyle(Paint.Style.FILL);
black.setColor(Color.GRAY);
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), black);
canvas.drawBitmap(ImageView1, null, null);
//Parachuter nr.1
x = 14;
y = 28;
CustomImageViewActivity p = new CustomImageViewActivity(x, y);
CustomImages.add(p);
Canvas c1 = new Canvas();
doDraw(c1);
}
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN) {
for (CustomImageViewActivity p: CustomImages) {
p.posX = event.getX();
p.posY = event.getY();
}
}
return false;
}
}
答案 0 :(得分:0)
第一个问题是,当你调用doDraw时,你会传入一个对画布的空引用。
为了实现您的目标,您可以扩展View并覆盖View类的onDraw方法。这将允许您在屏幕上绘图。
答案 1 :(得分:0)
根据您的日志,错误在第28行。不再检查:您将Canvas变量初始化为null,因此当您尝试访问其中一个方法时,很明显会发生NullPointerException。
我建议你以另一种方式将东西绘制到一个Activity中:子类化一个View并使用onDraw()方法为你提供一个Canvas。
答案 2 :(得分:0)
Canvas c = null;
Plz初始化它
Canvas c = new Canvas();