怎么样在ondraw()里面把一个view按照一个位置绘制出来?

我想把一个Framelayout绘制在屏幕的某个位置,并用Rect来确定其位置,请问在ondraw()里面应该怎么操作?我找不到什么函数可以绘制一个view。

阅读 4.6k
3 个回答

onDraw(Canvas canvas) 是用来绘制自定义view的,而 FrameLayout 是 android 的布局控件,canvas 并不具备绘制 FrameLayout 的 API,你可以从canvas的文档里查阅所有API:
http://developer.android.com/reference/android/graphics/Canvas.html

如果你是想自定义一个FrameLayout,可以这样做:

public class YourFrameLayout extends FrameLayout{
    Paint mPaint;
    public YourFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public YourFrameLayout(Context context) {
        super(context);
        // Paint类决定如何进行绘制操作。
        // 其方法可指定绘制图形的特征,例如是否填充图形、使用什么字体绘制、线条是什么颜色等。
        mPaint = new Paint();
        mPaint.setColor(0x22ff0000);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // Canvas类具有我们需要的所有绘制操作。
        // 其方法可决定绘制的位置及图形,例如线条、圆形、字词、矩形等
        canvas.drawRect(left, top, right, bottom, mPaint);
        ......
    }   
}

如果你是想把一个Framelayout绘制在屏幕的某个位置,就应该用layout文件;
或者通过代码new一个Framelayout,然后通过LayoutParams设置它的宽度和高度,再通过View.setX(float x)setY()设置坐标。

确定位置这事为什么不让 onLayout 来做呢?

继承一个布局比如FrameLayout 然后在onLayout里控制位置

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题