View 处理程序未提取要查看的数据
我试图使用处理程序将消息传递给View 处理程序未提取要查看的数据,view,android-canvas,android-handler,View,Android Canvas,Android Handler,我试图使用处理程序将消息传递给视图类;但我不知道我错在哪里。请纠正我。从处理程序获取值后,我从未使用画布进行绘制 提前谢谢 运行此程序后,我的日志cat在onDraw方法上显示NullPointerException。因此无法绘制线条 public class List extends Activity{ Handler handler=new Handler(); Message msg=new Message(); Bundle bundle=new Bundle(); @Overrid
视图类;但我不知道我错在哪里。请纠正我。从处理程序获取值后,我从未使用画布进行绘制
提前谢谢
运行此程序后,我的日志cat在onDraw
方法上显示NullPointerException
。因此无法绘制线条
public class List extends Activity{
Handler handler=new Handler();
Message msg=new Message();
Bundle bundle=new Bundle();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TestView(this));
bundle.putFloat("x1", 10);
bundle.putFloat("y1", 10);
bundle.putFloat("x2", 100);
bundle.putFloat("y2", 100);
msg.setData(bundle);
handler.sendMessage(msg);
}
}
class TestView extends View {
Paint p;
float x1;
float y1;
float x2;
float y2;
public TestView(Context context) {
super(context);
Paint p=new Paint();
p.setColor(Color.BLUE);
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
Looper.prepare();
Bundle bundle=msg.getData();
x1=bundle.getFloat("x1");
y1=bundle.getFloat("y1");
x2=bundle.getFloat("x2");
y2=bundle.getFloat("y2");
Looper.loop();
}
};
}
boolean isDrawing=true;
@Override
protected void onDraw(Canvas canvas) {
canvas.drawLine(x1, y1, x2, y2, p);
invalidate();
}
}
处理程序总是只连接到一个线程,除非并直到我们没有线程,否则它无法工作。i、 e在主线程和后台线程之间发送或接收数据
视图类的正确程序应如下所示:
public class List extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TestView(this));
}
}
class TestView extends View {
Bitmap bitmap=Bitmap.createBitmap(1000, 1000, Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
Paint p=new Paint();
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
p.setColor(Color.BLUE);
Bundle bundle=msg.getData();
String name=bundle.getString("Name");
Toast.makeText(getContext(), name, Toast.LENGTH_LONG).show();
}
};
public TestView(Context context) {
super(context);
Paint p=new Paint();
p.setColor(Color.BLUE);
new Thread(){
public void run(){
Message msg=new Message();
Bundle bundle=new Bundle();
Bundle bundle1=new Bundle();
Looper.prepare();
bundle.putString("Name", "Nishant");
bundle1.putString("Name", "Neha");
msg.setData(bundle);
handler.sendMessage(msg);
Message m1=new Message();
m1.setData(bundle1);
handler.sendMessage(m1);
}
}.start();
}
@Override
protected void onDraw(Canvas canvas) {
}
}