canvas教程

android下画图不显示的问题

字号+ 作者:H5之家 来源:H5之家 2015-10-26 10:48 我要评论( )

本帖最后由 yxz329130952 于 2012-10-18 16:14:26 编辑 我在程序中使用android的canvas进行画图,想把画图的功能稍微封装一下,让外面的类可以调用,但是发现,我使用canvas画图的时候在类的OnDraw函数当中可以正常显示,但是一旦把画图封装成一个函数让外面

本帖最后由 yxz329130952 于 2012-10-18 16:14:26 编辑

我在程序中使用android的canvas进行画图,想把画图的功能稍微封装一下,让外面的类可以调用,但是发现,我使用canvas画图的时候在类的OnDraw函数当中可以正常显示,但是一旦把画图封装成一个函数让外面的类来调用,却始终看不到画的图。我的代码如下
MainActivity.java

public class MainActivity extends Activity {

FrameLayout linearLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        linearLayout=(FrameLayout)findViewById(R.id.linearLayout_canvas);
        final MyCanvas myCanvas=new MyCanvas(this);
        linearLayout.addView(myCanvas);
        Button drawCircle=(Button)findViewById(R.id.drawCircle);
        Button drawLine =(Button)findViewById(R.id.drawLine);
        drawCircle.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
myCanvas.drawCircle(100, 100, 100);
}
});
        
        drawLine.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
myCanvas.drawLine(200, 200, 300, 300);

}
});
       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    
}

MyCanvas.java

public class MyCanvas extends View{

private Canvas myCanvas;
private Paint myPaint=new Paint();

public MyCanvas(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.setOnTouchListener(new View.OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawCircle(event.getX(), event.getY(), 20);
break;
default:
break;
}
return true;
}
});
}

public MyCanvas(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}

public MyCanvas(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
this.myCanvas=canvas;
}

/**
 * 设置画笔默认样式
 */
public void setPaintDefaultStyle(){
myPaint.setAntiAlias(true);
myPaint.setColor(Color.BLACK);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(2);
}


/**
 * 画圆
 * @param x x坐标
 * @param y y坐标
 * @param radius 圆的半径
 */
public void drawCircle(float x,float y,float radius){
setPaintDefaultStyle();
myCanvas.drawCircle(x, y, radius, myPaint);
// invalidate();
}

/**
 * 画一条直线
 * @param fromX 起点x坐标
 * @param fromY 起点Y坐标
 * @param toX 终点X坐标
 * @param toY 终点Y坐标
 */
public void drawLine(float fromX,float fromY,float toX,float toY){
setPaintDefaultStyle();
Path linePath=new Path();
linePath.moveTo(fromX, fromY);
linePath.lineTo(toX, toY);
linePath.close();
myCanvas.drawPath(linePath, myPaint);
// invalidate();
}
}

在上面的两个代码当中,我调试的时候相应的执行函数都被执行过,比如说我用MainActivity调用drawLine函数,可以在调试的时候看到这个函数确实被执行了,但是画面就是不显示。我后面想加上invalidate函数重绘一下,调试的时候可以看到onDraw函数确实被执行了,但是还是没有画面显示,不知道怎么回事,忘各位指点迷津啊~

2012-10-18 16:10:16 yxz329130952 楼主

6个回答

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Canvas与ValueAnimator

    Canvas与ValueAnimator

    2017-04-28 18:00

  • Android Bitmap和Canvas学习笔记(转)

    Android Bitmap和Canvas学习笔记(转)

    2017-04-28 17:00

  • HTML5 canvas 作画板画图 可以做电子白板

    HTML5 canvas 作画板画图 可以做电子白板

    2017-04-27 12:02

  • 21天学习android开发教程之SurfaceView与多线程的混搭

    21天学习android开发教程之SurfaceView与多线程的混搭

    2017-04-27 12:00

网友点评