Android 安卓:onClick不幸停止

Android 安卓:onClick不幸停止,android,Android,我想在android上写一个简单的图像编辑器。但有一个问题。当我在模拟器上运行它时,所有这些都是正确的,直到按下按钮。“不幸的是,…停止…”出现在屏幕上,程序被迫关闭。但我真的知道哪里错了。请帮我弄清楚。多谢各位 这是我的程序代码 btn1.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { draw(drawAction.effect_gray)

我想在android上写一个简单的图像编辑器。但有一个问题。当我在模拟器上运行它时,所有这些都是正确的,直到按下按钮。“不幸的是,…停止…”出现在屏幕上,程序被迫关闭。但我真的知道哪里错了。请帮我弄清楚。多谢各位

这是我的程序代码

btn1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            draw(drawAction.effect_gray);
            }
        });

    btn2.setOnClickListener(new OnClickListener() {  
         public void onClick(View arg0) {
             draw(drawAction.effect_negative);
            }
        });
    }

@Override
protected void onResume() {
    super.onResume();

}

enum drawAction {
    effect_gray, effect_negative;
}

void draw(drawAction action) {
    Canvas canvas = null;

    switch (action) {
    case effect_gray:
         gray(canvas);
        break;
    case effect_negative:
        negative(canvas);
         break;
}
        }
void gray(Canvas canvas) {
    Bitmap vBitmap2 = BitmapFactory.decodeResource( this.getResources()
            , R.drawable.images);

    Paint paint = new Paint();
    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.setSaturation(0);
    ColorMatrixColorFilter colorMatrixFilter = new ColorMatrixColorFilter(colorMatrix);
    paint.setColorFilter(colorMatrixFilter);
    canvas.drawBitmap(vBitmap2, 0, 0, paint);

 img1.setImageBitmap(vBitmap2);
}

    void negative(Canvas canvas) {
     Bitmap vBitmap2 = BitmapFactory.decodeResource( this.getResources()
                , R.drawable.images);
  Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    
  ColorMatrix cm = new ColorMatrix(new float[] {  
    -1f,  0f,  0f, 0f, 255f,  
     0f, -1f,  0f, 0f, 255f,  
     0f,  0f, -1f, 0f, 255f,  
     0f,  0f,  0f, 1f,   0f});  
  paint.setColorFilter(new ColorMatrixColorFilter(cm));  
  canvas.drawBitmap(vBitmap2, 0, 0, paint);  

  img1.setImageBitmap(vBitmap2);
}
}



12-16 16:32:11.741: E/AndroidRuntime(597): FATAL EXCEPTION: main
12-16 16:32:11.741: E/AndroidRuntime(597): java.lang.NullPointerException
12-16 16:32:11.741: E/AndroidRuntime(597):  at com.example.a.Aa.gray(Aa.java:81)
12-16 16:32:11.741: E/AndroidRuntime(597):  at com.example.a.Aa.draw(Aa.java:64)
12-16 16:32:11.741: E/AndroidRuntime(597):  at com.example.a.Aa$1.onClick(Aa.java:37)
12-16 16:32:11.741: E/AndroidRuntime(597):  at android.view.View.performClick(View.java:3480)
12-16 16:32:11.741: E/AndroidRuntime(597):  at android.view.View$PerformClick.run(View.java:13983)
12-16 16:32:11.741: E/AndroidRuntime(597):  at android.os.Handler.handleCallback(Handler.java:605)
12-16 16:32:11.741: E/AndroidRuntime(597):  at android.os.Handler.dispatchMessage(Handler.java:92)
12-16 16:32:11.741: E/AndroidRuntime(597):  at android.os.Looper.loop(Looper.java:137)
12-16 16:32:11.741: E/AndroidRuntime(597):  at android.app.ActivityThread.main(ActivityThread.java:4340)
12-16 16:32:11.741: E/AndroidRuntime(597):  at java.lang.reflect.Method.invokeNative(Native Method)
12-16 16:32:11.741: E/AndroidRuntime(597):  at java.lang.reflect.Method.invoke(Method.java:511)
12-16 16:32:11.741: E/AndroidRuntime(597):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-16 16:32:11.741: E/AndroidRuntime(597):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-16 16:32:11.741: E/AndroidRuntime(597):  at dalvik.system.NativeStart.main(Native Method)
我认为这是个问题

Canvas canvas = null;
switch (action) {
case effect_gray:
     gray(canvas);
    break;
case effect_negative:
    negative(canvas);
     break;
}
最初canvas为null,您将canvas作为null传递,这可能会导致null指针异常。有关更多信息,请共享堆栈跟踪

像这样重写

void draw(drawAction action, Canvas canvas) 
{
   if(canvas != null)
   { 
       switch (action) {
          case effect_gray:
          gray(canvas);
          break;
       case effect_negative:
          negative(canvas);
          break;
    }
}
并将此方法称为:

draw(drawAction.effect_gray,canvas);
我认为这是个问题

Canvas canvas = null;
switch (action) {
case effect_gray:
     gray(canvas);
    break;
case effect_negative:
    negative(canvas);
     break;
}
最初canvas为null,您将canvas作为null传递,这可能会导致null指针异常。有关更多信息,请共享堆栈跟踪

像这样重写

void draw(drawAction action, Canvas canvas) 
{
   if(canvas != null)
   { 
       switch (action) {
          case effect_gray:
          gray(canvas);
          break;
       case effect_negative:
          negative(canvas);
          break;
    }
}
并将此方法称为:

draw(drawAction.effect_gray,canvas);

draw
方法中将画布实例作为参数传递

void draw(drawAction action, Canvas canvas) {

    if(canvas != null)
    {
        switch (action) {
            case effect_gray:
                gray(canvas);
                break;
            case effect_negative:
                negative(canvas);
                break;
        }
    }
}

draw
方法中将画布实例作为参数传递

void draw(drawAction action, Canvas canvas) {

    if(canvas != null)
    {
        switch (action) {
            case effect_gray:
                gray(canvas);
                break;
            case effect_negative:
                negative(canvas);
                break;
        }
    }
}

您不需要
枚举

使用类成员保存画布实例,然后根据需要调用
gray
negative
方法

private Canvas mCanvas;

onCreate(Bundle bundle)
{
    btn1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            gray(mCanvas);
        }
    });

    btn2.setOnClickListener(new OnClickListener() {  
        public void onClick(View arg0) {
             negative(mCanvas);
        }
    });
}

...

void gray(Canvas canvas) {
    ...
}

void negative(Canvas canvas) {
       ...
}

您不需要
枚举

使用类成员保存画布实例,然后根据需要调用
gray
negative
方法

private Canvas mCanvas;

onCreate(Bundle bundle)
{
    btn1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            gray(mCanvas);
        }
    });

    btn2.setOnClickListener(new OnClickListener() {  
        public void onClick(View arg0) {
             negative(mCanvas);
        }
    });
}

...

void gray(Canvas canvas) {
    ...
}

void negative(Canvas canvas) {
       ...
}

分享LogCat关于错误的信息分享LogCat关于错误的信息谢谢。但是如何在onCreate{}中声明变量“canvas”?最初的问题已经解决,但是当我单击按钮时,图像没有发生任何变化。
public class Aa扩展活动{private button btn1,btn2;private ImageView img1;private canvas canvas;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_aa)
将您的私有画布变量
Canvas
分配给您希望将
gray
negative
方法应用于的
Canvas
实例。您已经在onCreate方法之前将其声明为类变量。如果您计划使用只有一个画布的灰色和负数。“谢谢。但是我如何在onCreate{}中声明变量‘canvas’?原始问题已经解决,但当我单击按钮时,图像没有发生任何变化。
public class Aa extends Activity{private按钮btn1,btn2;private ImageView img1;private Canvas Canvas;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_aa)
将您的私有画布变量
Canvas
分配给您希望将
gray
negative
方法应用于的
Canvas
实例。您已经在onCreate方法之前将其声明为类变量。如果您计划使用只有一张画布的灰色和负片。”