【问题标题】:Android canvas draw rectangleAndroid画布绘制矩形
【发布时间】:2011-09-08 07:18:43
【问题描述】:

如何使用等边框宽度 = 3 和边框颜色 = 黑色绘制空矩形,矩形内的部分没有内容或颜色。使用 Canvas 中的哪个函数

void drawRect(float left, float top, float right, float bottom, Paint paint)

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

谢谢。

我试试这个例子

Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 0, 0));
myPaint.setStrokeWidth(10);
c.drawRect(100, 100, 200, 200, myPaint);

它绘制矩形并用黑色填充,但我只想要“框架” 喜欢这张图片:

【问题讨论】:

    标签: android android-canvas


    【解决方案1】:

    试试paint.setStyle(Paint.Style.STROKE)

    【讨论】:

      【解决方案2】:

      假设“矩形内的部分没有内容颜色”表示您希望矩形内有不同的填充;您需要在矩形内绘制一个矩形,然后使用笔画宽度 0 和所需的填充颜色。

      例如:

      DrawView.java

      import android.content.Context;
      import android.graphics.Canvas;
      import android.graphics.Color;
      import android.graphics.Paint;
      import android.view.View;
      
      public class DrawView extends View {
          Paint paint = new Paint();
      
          public DrawView(Context context) {
              super(context);            
          }
      
          @Override
          public void onDraw(Canvas canvas) {
              paint.setColor(Color.BLACK);
              paint.setStrokeWidth(3);
              canvas.drawRect(30, 30, 80, 80, paint);
              paint.setStrokeWidth(0);
              paint.setColor(Color.CYAN);
              canvas.drawRect(33, 60, 77, 77, paint );
              paint.setColor(Color.YELLOW);
              canvas.drawRect(33, 33, 77, 60, paint );
      
          }
      
      }
      

      启动它的活动:

      StartDraw.java

      import android.app.Activity;
      import android.graphics.Color;
      import android.os.Bundle;
      
      public class StartDraw extends Activity {
          DrawView drawView;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
      
              drawView = new DrawView(this);
              drawView.setBackgroundColor(Color.WHITE);
              setContentView(drawView);
      
          }
      }
      

      ...会变成这样:

      【讨论】:

      • 其实这就是我所需要的 screencast.com/t/oFYF5kGtw5B 那个红色的矩形,我画完所有只是为了添加那个矩形,这可能吗?
      • 这是解决方案 paint.setStyle(Style.STROKE);感谢您的帮助。
      • 我认为 DonGru 和 Juan 在这里给出了很好的解释.. 但是@Yuck 下面提供了作者所要求的确切答案——paint.setStyle(Paint.Style.STROKE )
      • 这个答案与答案不符。它没有显示正确的答案。潘杜尔的答案是正确的。
      【解决方案3】:
      //white background
      canvas.drawRGB(255, 255, 255);
      //border's properties
      paint.setColor(Color.BLACK);
      paint.setStrokeWidth(0);        
      paint.setStyle(Paint.Style.STROKE);         
      canvas.drawRect(100, 100, 200, 200, paint);
      

      【讨论】:

        【解决方案4】:

        创建一个新类MyView, Which extends View。覆盖onDraw(Canvas canvas) 方法以在Canvas 上绘制矩形。

        import android.content.Context;
        import android.graphics.Canvas;
        import android.graphics.Color;
        import android.graphics.Paint;
        import android.graphics.Path;
        import android.util.AttributeSet;
        import android.view.View;
        
        public class MyView extends View {
        
         Paint paint;
         Path path;
        
         public MyView(Context context) {
          super(context);
          init();
         }
        
         public MyView(Context context, AttributeSet attrs) {
          super(context, attrs);
          init();
         }
        
         public MyView(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);
          init();
         }
        
         private void init(){
          paint = new Paint();
          paint.setColor(Color.BLUE);
          paint.setStrokeWidth(10);
          paint.setStyle(Paint.Style.STROKE);
        
         }
        
         @Override
         protected void onDraw(Canvas canvas) {
          // TODO Auto-generated method stub
          super.onDraw(canvas);
        
          canvas.drawRect(30, 50, 200, 350, paint);
          canvas.drawRect(100, 100, 300, 400, paint);
          //drawRect(left, top, right, bottom, paint)
        
         }
        
        }
        

        然后使用我们的自定义视图 MyView.Call 将您的 Java 活动移动到 setContentView()

            public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(new MyView(this));
          }
        

        更多详情,您可以访问这里

        http://developer.android.com/reference/android/graphics/Canvas.html

        【讨论】:

          【解决方案5】:
          paint.setStrokeWidth(3);
          
          paint.setColor(BLACK);
          

          您的drawRect 中的任何一个都应该可以工作。

          【讨论】:

            【解决方案6】:

            代码很好,只需将绘画的样式设置为笔划

            paint.setStyle(Paint.Style.STROKE);
            

            【讨论】:

              【解决方案7】:

              不知道这是否为时已晚,但我解决这个问题的方法是绘制四个细长的矩形,它们一起构成一个大边框。用一个矩形绘制边框似乎是不可撤销的,因为它们都是不透明的,因此您应该分别绘制边框的每条边缘。

              【讨论】:

              • 或者两个矩形一个在另一个里面:)
              • 或者一个圆,一个背景色的圆,一个三段的drawLines()和一个矩形,为第四行。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-11
              • 2019-09-01
              • 1970-01-01
              相关资源
              最近更新 更多