W.K*_*K.S 2 android view nullpointerexception
我正在创建一个我添加到FrameLayout的自定义视图.当我初始化视图时,我得到一个NullPointerException.我究竟做错了什么.该视图的代码是:
public class DocumentCameraMask extends View {
private Context mContext;
public DocumentCameraMask(Context context) {
super(context);
this.mContext = context;
}
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
Paint paint = new Paint();
paint.setColor(this.mContext.getResources().getColor(R.color.textColor));
paint.setStyle(Paint.Style.STROKE);
Rect cropRect = new Rect(0,0,800,600);
canvas.drawRect(cropRect, paint);
super.draw(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)
cropRect大小将动态计算,这就是我需要创建此视图的原因.谢谢你的帮助.
logcat的
09-11 19:13:04.590:E/AndroidRuntime(4235):FATAL EXCEPTION:main 09-11 19:13:04.590:E/AndroidRuntime(4235):java.lang.RuntimeException:无法启动活动DocumentCameraActivity}:java .lang.NullPointerException 09-11 19:13:04.590:E/AndroidRuntime(4235):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)09-11 19:13:04.590:E/AndroidRuntime(4235) :在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)09-11 19:13:04.590:E/AndroidRuntime(4235):在android.app.ActivityThread.access $ 600(ActivityThread.java:149)09- 11 19:13:04.590:E/AndroidRuntime(4235):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1300)09-11 19:13:04.590:E/AndroidRuntime(4235):在android. os.Handler.dispatchMessage(Handler.java:99)09-11 19:13:04.590:E/AndroidRuntime(4235):在android.os.Looper.loop(Looper.java:153)09-11 19:13:04.590:E/AndroidRuntime(4235):在android.app.ActivityThread.main(ActivityThread.java) :4987)09-11 19:13:04.590:E/AndroidRuntime(4235):at java.lang.reflect.Method.invokeNative(Native Method)09-11 19:13:04.590:E/AndroidRuntime(4235):at java.lang.reflect.Method.invoke(Method.java:511)09-11 19:13:04.590:E/AndroidRuntime(4235):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java) :821)09-11 19:13:04.590:E/AndroidRuntime(4235):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)09-11 19:13:04.590:E/AndroidRuntime (4235):at dalvik.system.NativeStart.main(Native Method)09-11 19:13:04.590:E/AndroidRuntime(4235):引起:java.lang.NullPointerException 09-11 19:13:04.590:E/AndroidRuntime(4235):在android.view.ViewConfiguration.get(ViewConfiguration.java:332)09-11 19:13:04.590:E/AndroidRuntime(4235):在android.view.View.(View.java: 3243)
你不必重写draw()方法View,无论你想做什么绘图,都要使用onDraw()方法.
public class DocumentCameraMask extends View {
private Context mContext;
public DocumentCameraMask(Context context) {
super(context);
this.mContext = context;
}
@Override
public void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(this.mContext.getResources().getColor(R.color.textColor));
paint.setStyle(Paint.Style.STROKE);
Rect cropRect = new Rect(0,0,800,600);
canvas.drawRect(cropRect, paint);
}
}
Run Code Online (Sandbox Code Playgroud)
refernces:
1. 谷歌链接
2.另一个链接,这可能帮助你
更新:
我的主要活动:
public class MainActivity extends Activity {
DocumentCameraMask mask;
RelativeLayout rel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rel = (RelativeLayout) findViewById(R.id.t);
mask = new DocumentCameraMask(this);
mask.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT));
byte b = 100;
int a = b;
Toast.makeText(this,"Int "+a,Toast.LENGTH_LONG).show();
rel.addView(mask);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
自定义视图DocumentCameraMask类:
public class DocumentCameraMask extends View {
private Context mContext;
public DocumentCameraMask(Context context) {
super(context);
this.mContext = context;
}
@Override
public void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
Rect cropRect = new Rect(0,0,800,600);
canvas.drawRect(cropRect, paint);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:

| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |