在android中绘制位图

时间:2012-04-02 16:06:38

标签: android bitmap android-canvas

我正在制作一个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;
}
}

3 个答案:

答案 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();