本帖最后由 dacsd 于 2010-12-13 16:03:57 编辑

解决方案 »

  1.   

    楼主要的效果
    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");
            }
               
        }
      

  2.   

    谢谢
    我看这个代码怎么和android 不一样呀,测试不成功。
      

  3.   

    楼上的兄弟 :
    public void onClick(View v) {
                    // TODO Auto-generated method stub
                    mMyView.drawLine();
                    mMyView.postInvalidate();
                }
      

  4.   

    gezhibo1985,你好!
    可以给一个简单的完整代码吗?我是初学者
      

  5.   


    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");
            }
               
        }
    }
      

  6.   

    建一个 工程 Activite 的名字叫 DrawLine  把代码复制就可以了  我测试了 
      

  7.   

    另外,如果我在布局文件中也就是在main.xlm中创建了一个view,能否在这个view中画线,如果可以,能否提供简单的代码,谢谢。
      

  8.   

    多谢。
            public void drawLine() {
                // 设置画线标志
                bDrawLineFlg = !bDrawLineFlg;
                Log.d(TAG, "to be draw");
            }
    原来要执行postInvalidate()刷新,怨不得我用上面那样设置,只有第一次点击起作用,原来是没有刷新。
      

  9.   

    请问:这段代码为何不能正确执行,系统没有检查出错误,可以通过编译。-------------------------------------------------------------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);
    }}
      

  10.   

    还是建议LZ先看看基本的知识,你的这个要求是android里面最基本的,就是一个画布,一个按钮来响应,触发你的view的渲染
      

  11.   

    刚刚接触java,想先练一个项目,就遇到了问题,我感到就是一个画布的问题,看了一些资料,找不出问题。
      

  12.   


    查了不少资料,基本都是java语法类的,一直没有找到这个问题的解决办法
      

  13.   

    刚刚接触java,想先练一个项目,就遇到了问题,我感到就是一个画布的问题,看了一些资料,找不出问题。
    请帮忙看看