android - 自定义 View Canvas onDraw() 不绘制任何东西

标签 android android-canvas android-view ondraw

我正在尝试使用 Canvas 绘制椭圆形,但从未绘制出来。 这是我的自定义 View 代码。我也使用了 setWillNotDraw(false) 仍然没有在屏幕上绘制任何东西。

public class Myview extends View {
    Paint paint;
    RectF rect;
    public Myview(Context context) {
        super(context);
        init();
        setWillNotDraw(false);
    }

    public Myview(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
        setWillNotDraw(false);
    }

    public Myview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
        setWillNotDraw(false);
    }

    private void init() {
        rect = new RectF(0.1 f, 0.1 f, getWidth(), getHeight());
        paint = new Paint();
        paint.setShader(new LinearGradient(0.40 f, 0.0 f, 100.60 f, 100.0 f,
            Color.parseColor("#ffffff"),
            Color.parseColor("#Ffffff"),
            Shader.TileMode.CLAMP));
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        setMeasuredDimension(200, 200);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawOval(rect, paint);
    }
}

有什么建议吗?

最佳答案

问题是 getWidth() 和 getHeight() 是 O。根据您的要求更改它。

您可以使用以下内容作为引用。

public class MainActivity extends Activity
{    

MyView mv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mv= new MyView(this);
setContentView(mv);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(20);
mPaint.setShader(new LinearGradient(0.40f, 0.0f, 100.60f, 100.0f, 
      Color.RED,
      Color.RED,
      Shader.TileMode.CLAMP));

}

private Paint       mPaint;

public class MyView extends View{
  Paint paint;
  RectF rect;
   public MyView(Context context) {
          super(context);
          rect = new RectF(20, 20, 100,100);
          //canvas.drawOval(new RectF(50, 50, 20, 40), p)
   }
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

      setMeasuredDimension(200, 200);

  }



  @Override
      protected void onDraw(Canvas canvas) {
          super.onDraw(canvas);
          canvas.drawOval(rect, mPaint);

      }
  }
}

根据您的要求更改坐标和颜色。上面画了一个圆,但你可以改变坐标来画椭圆形的东西,比如 canvas.drawOval(new RectF(50, 50, 20, 40), mPaint);

enter image description here

关于android - 自定义 View Canvas onDraw() 不绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605428/

相关文章:

android - 防止最后一个 Fragment 从 backstack 中删除

android - 什么是正内边距和负内边距?

android - 在android中放大/缩小或拖动后获取Canvas坐标

android - 如何使用 PorterDuff Xfermodes 和 Alpha Mask 删除位图的一部分?

java - 在 Canvas 的左上角绘制文本

android - 自定义 ListView 错误 : java. lang.unsupportedoperationexception: addview

Java嵌套内部类访问外部类变量

java - Android SQLite 使用 IN() 进行查询

java - Android 侧边栏,如 facebook 或 firefox

android - 如何根据宽度放置两个 View ?