Java 位图创建空指针异常

Java 位图创建空指针异常,java,android,android-layout,bitmap,android-view,Java,Android,Android Layout,Bitmap,Android View,这是我的xml文件:我试图访问的图像视图 <ImageView android:layout_width="350dip" android:layout_height="400dip" android:id="@+id/imgview" android:background="@drawable/pattern" android:layout_centerVertical="true" android:layout_alignParentRi

这是我的xml文件:我试图访问的图像视图

<ImageView
    android:layout_width="350dip"
    android:layout_height="400dip"
    android:id="@+id/imgview"
    android:background="@drawable/pattern"
    android:layout_centerVertical="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

如果您在该行上得到一个NullPointerException,它意味着
img
为null,这意味着
findViewById(R.id.imgview)返回null,或onDraw作为
super(上下文)的一部分执行(不确定是否是这种情况)。

当您希望位图中的宽度或高度超过设备大小时,可能会出现此错误。您应该使用
createScaledBitmap
。这对你有帮助

您正在设置内容视图两次。一对一布局。一个到您的自定义视图。最后一个被称为的是您的布局将被设置为。由于您上次设置了自定义视图,该布局中将不存在imgview。我希望在布局的中心显示画布。。我应该怎么做呢?我尝试了
img.setDrawingCacheEnabled(true)但它也不起作用!
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setContentView(new SampleView(this));
}

private static class SampleView extends View {

    private ImageView img;
    // CONSTRUCTOR
    public SampleView(Context context) {
        super(context);
        setFocusable(true);
       img = (ImageView)findViewById(R.id.imgview);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();

        canvas.drawColor(Color.GREEN);
  //I keep on getting null pointer exception here
        Bitmap b = Bitmap.createBitmap(img.getMeasuredWidth(),img.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        c.drawRect(0, 0, 200, 200, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
        paint.setTextSize(40);
        paint.setTextScaleX(1.f);
        paint.setAlpha(0);
        paint.setAntiAlias(true);
        c.drawText("Your text", 30, 40, paint);
        paint.setColor(Color.RED);

        canvas.drawBitmap(b, 10,10, paint);
    }

   }
}