单击按钮,在屏幕上画一条直线 本帖最后由 dacsd 于 2010-12-13 16:03:57 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主要的效果 private static LinearLayout ll; private MyView mMyView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// setContentView(R.layout.main); // ll = new LinearLayout(this.getBaseContext()); ll.setOrientation(LinearLayout.VERTICAL); // button Button btn = new Button(this.getBaseContext()); btn.setText("Draw Line"); // btn.setTextColor(0xff000000); btn.setTextSize(16); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.topMargin = 5; lp.leftMargin = 5; ll.addView(btn, lp); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); lp1.weight = 1; mMyView = new MyView(this.getBaseContext()); ll.addView(mMyView, lp1); setContentView(ll); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mMyView.drawLine(); } }); } public class MyView extends View { private Paint paint; private boolean bDrawLineFlg = false; MyView(Context context) { super(context); // paint = new Paint(); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawRGB(0, 0, 0); paint.setColor(Color.BLUE); // draw line if (bDrawLineFlg) { Log.d("-----------", "drawLine 1111"); canvas.drawLine(50, 50, 100, 100, paint); } } public void drawLine() { // bDrawLineFlg = true; Log.d("-----------", "drawLine 0000"); } } 谢谢我看这个代码怎么和android 不一样呀,测试不成功。 楼上的兄弟 :public void onClick(View v) { // TODO Auto-generated method stub mMyView.drawLine(); mMyView.postInvalidate(); } gezhibo1985,你好!可以给一个简单的完整代码吗?我是初学者 import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.LinearLayout.LayoutParams;public class DrawLine extends Activity { private static LinearLayout ll ; private MyView mMyView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// setContentView(R.layout.main); // ll = new LinearLayout(this.getBaseContext()); ll.setOrientation(LinearLayout.VERTICAL); // button Button btn = new Button(this.getBaseContext()); btn.setText("Draw Line"); // btn.setTextColor(0xff000000); btn.setTextSize(16); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.topMargin = 5; lp.leftMargin = 5; ll.addView(btn, lp); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); lp1.weight = 1; mMyView = new MyView(this.getBaseContext()); ll.addView(mMyView, lp1); setContentView(ll); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mMyView.drawLine(); mMyView.postInvalidate(); } }); } public class MyView extends View { private Paint paint; private boolean bDrawLineFlg = false; MyView(Context context) { super(context); // paint = new Paint(); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawColor(Color.WHITE); paint.setColor(Color.BLUE); // draw line if (bDrawLineFlg) { Log.d("-----------", "drawing"); canvas.drawLine(0, 100,100, 100, paint); // canvas.drawRect(100,100, 200, 200, paint); RectF oval = new RectF(100,100, 200, 200); canvas.drawArc(oval, 30, 180, true, paint); } } public void drawLine() { // bDrawLineFlg = true; Log.d("-----------", "to be draw"); } }} 建一个 工程 Activite 的名字叫 DrawLine 把代码复制就可以了 我测试了 另外,如果我在布局文件中也就是在main.xlm中创建了一个view,能否在这个view中画线,如果可以,能否提供简单的代码,谢谢。 多谢。 public void drawLine() { // 设置画线标志 bDrawLineFlg = !bDrawLineFlg; Log.d(TAG, "to be draw"); }原来要执行postInvalidate()刷新,怨不得我用上面那样设置,只有第一次点击起作用,原来是没有刷新。 请问:这段代码为何不能正确执行,系统没有检查出错误,可以通过编译。-------------------------------------------------------------package P.hello;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Rect;import android.graphics.RectF;import android.os.AsyncTask;import android.os.Bundle;import android.util.AttributeSet;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class A_hello extends Activity { /** Called when the activity is first created. */ final A_hello m = this; private MyView mv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button mbnt = (Button) findViewById(R.id.bnt1); Button cbnt = (Button) findViewById(R.id.bnt2); mbnt.setOnClickListener(bnt1); cbnt.setOnClickListener(bnt2); setTitle("android练习"); View mv = (View) findViewById(R.id.View01); } public class MyView extends View { private Paint paint; private boolean bDrawLineFlg = false; MyView(Context context) { super(context); // paint = new Paint(); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawColor(Color.WHITE); paint.setColor(Color.BLUE); // draw line if (bDrawLineFlg) { Log.d("-----------", "drawing"); canvas.drawLine(50, 5, 100, 100, paint); // canvas.drawRect(100,100, 200, 200, paint); RectF oval = new RectF(100, 100, 200, 200); canvas.drawArc(oval, 30, 180, true, paint); } } public void drawLine() { // bDrawLineFlg = true; Log.d("-----------", "to be draw"); } } private OnClickListener bnt1 = new OnClickListener() { public void onClick(View v) { TextView tv1 = (TextView) findViewById(R.id.TextView01); tv1.setText("画线测试!"); Toast.makeText(m, "画线测试!", Toast.LENGTH_LONG).show(); mv.drawLine(); mv.postInvalidate(); } }; private OnClickListener bnt2 = new OnClickListener() { public void onClick(View v) { TextView tv1 = (TextView) findViewById(R.id.TextView01); tv1.setText("退出程序!"); Toast.makeText(m, "退出程序", Toast.LENGTH_LONG).show(); finish(); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, 1, 1, R.string.m1); menu.add(0, 2, 2, R.string.m2); menu.add(0, 3, 3, R.string.m3); menu.add(0, 4, 4, R.string.m4); return super.onCreateOptionsMenu(menu); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub return super.onContextItemSelected(item); }} 还是建议LZ先看看基本的知识,你的这个要求是android里面最基本的,就是一个画布,一个按钮来响应,触发你的view的渲染 刚刚接触java,想先练一个项目,就遇到了问题,我感到就是一个画布的问题,看了一些资料,找不出问题。 查了不少资料,基本都是java语法类的,一直没有找到这个问题的解决办法 刚刚接触java,想先练一个项目,就遇到了问题,我感到就是一个画布的问题,看了一些资料,找不出问题。请帮忙看看 蓝牙连接问题 蓝牙连接问题 在AppWidgetProvider派生类的方法中怎么操作成员变量 [求助]关于box2d引擎 android 如何使用tcp socket如何发送二进制数据? android 自适应屏幕分辨率 android 视频监控系统 思路 android端如何控制同一局域网内的电脑 dp px转换 fragement中listview无法更新,求赐教 求助:android2.1d编译的时候出现的问题 在线等 兄弟们,我想一开机就启动一个service 如何实现啊?
private static LinearLayout ll;
private MyView mMyView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
//
ll = new LinearLayout(this.getBaseContext());
ll.setOrientation(LinearLayout.VERTICAL); // button
Button btn = new Button(this.getBaseContext());
btn.setText("Draw Line");
//
btn.setTextColor(0xff000000);
btn.setTextSize(16);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.topMargin = 5;
lp.leftMargin = 5;
ll.addView(btn, lp); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
lp1.weight = 1;
mMyView = new MyView(this.getBaseContext());
ll.addView(mMyView, lp1);
setContentView(ll); btn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
mMyView.drawLine();
}
}); } public class MyView extends View {
private Paint paint;
private boolean bDrawLineFlg = false;
MyView(Context context) {
super(context);
//
paint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawRGB(0, 0, 0);
paint.setColor(Color.BLUE);
// draw line
if (bDrawLineFlg) {
Log.d("-----------", "drawLine 1111");
canvas.drawLine(50, 50, 100, 100, paint);
}
}
public void drawLine() {
//
bDrawLineFlg = true;
Log.d("-----------", "drawLine 0000");
}
}
我看这个代码怎么和android 不一样呀,测试不成功。
public void onClick(View v) {
// TODO Auto-generated method stub
mMyView.drawLine();
mMyView.postInvalidate();
}
可以给一个简单的完整代码吗?我是初学者
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;public class DrawLine extends Activity {
private static LinearLayout ll ;
private MyView mMyView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
//
ll = new LinearLayout(this.getBaseContext());
ll.setOrientation(LinearLayout.VERTICAL); // button
Button btn = new Button(this.getBaseContext());
btn.setText("Draw Line");
//
btn.setTextColor(0xff000000);
btn.setTextSize(16);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.topMargin = 5;
lp.leftMargin = 5;
ll.addView(btn, lp); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
lp1.weight = 1;
mMyView = new MyView(this.getBaseContext());
ll.addView(mMyView, lp1);
setContentView(ll); btn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
mMyView.drawLine();
mMyView.postInvalidate();
}
}); } public class MyView extends View {
private Paint paint;
private boolean bDrawLineFlg = false;
MyView(Context context) {
super(context);
//
paint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
// draw line
if (bDrawLineFlg) {
Log.d("-----------", "drawing");
canvas.drawLine(0, 100,100, 100, paint);
// canvas.drawRect(100,100, 200, 200, paint);
RectF oval = new RectF(100,100, 200, 200);
canvas.drawArc(oval, 30, 180, true, paint);
}
}
public void drawLine() {
//
bDrawLineFlg = true;
Log.d("-----------", "to be draw");
}
}
}
public void drawLine() {
// 设置画线标志
bDrawLineFlg = !bDrawLineFlg;
Log.d(TAG, "to be draw");
}
原来要执行postInvalidate()刷新,怨不得我用上面那样设置,只有第一次点击起作用,原来是没有刷新。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;public class A_hello extends Activity {
/** Called when the activity is first created. */
final A_hello m = this;
private MyView mv; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mbnt = (Button) findViewById(R.id.bnt1);
Button cbnt = (Button) findViewById(R.id.bnt2);
mbnt.setOnClickListener(bnt1);
cbnt.setOnClickListener(bnt2);
setTitle("android练习");
View mv = (View) findViewById(R.id.View01); } public class MyView extends View {
private Paint paint;
private boolean bDrawLineFlg = false; MyView(Context context) {
super(context);
//
paint = new Paint();
} @Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
// draw line
if (bDrawLineFlg) {
Log.d("-----------", "drawing");
canvas.drawLine(50, 5, 100, 100, paint);
// canvas.drawRect(100,100, 200, 200, paint);
RectF oval = new RectF(100, 100, 200, 200);
canvas.drawArc(oval, 30, 180, true, paint);
}
} public void drawLine() {
// bDrawLineFlg = true;
Log.d("-----------", "to be draw");
} } private OnClickListener bnt1 = new OnClickListener() {
public void onClick(View v) {
TextView tv1 = (TextView) findViewById(R.id.TextView01);
tv1.setText("画线测试!");
Toast.makeText(m, "画线测试!", Toast.LENGTH_LONG).show();
mv.drawLine();
mv.postInvalidate(); }
}; private OnClickListener bnt2 = new OnClickListener() {
public void onClick(View v) {
TextView tv1 = (TextView) findViewById(R.id.TextView01);
tv1.setText("退出程序!");
Toast.makeText(m, "退出程序", Toast.LENGTH_LONG).show();
finish();
}
}; @Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, 1, 1, R.string.m1);
menu.add(0, 2, 2, R.string.m2);
menu.add(0, 3, 3, R.string.m3);
menu.add(0, 4, 4, R.string.m4);
return super.onCreateOptionsMenu(menu); } @Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub return super.onContextItemSelected(item);
}}
查了不少资料,基本都是java语法类的,一直没有找到这个问题的解决办法
请帮忙看看