android - 通过将 Canvas 视为 View 来绘制矩形

标签 android android-canvas android-view drawrect rectangles

有没有一种简单的方法可以在 Canvas 上绘制矩形并将其显示在像 TextView 这样的 Activity 中?

我试着像这样画我的矩形:

Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.MAGENTA); 
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

Rect locationrect = new Rect(10, 10, 200, 100);
c.drawRect(locationrect, paint);

View locationpic = (View)findViewById(R.id.locationview);
locationpic.draw(c);

在我的 xml 中:

<View
    android:id="@+id/locationview"
    android:layout_width="520dp"
    android:layout_height="489dp"
    android:layout_marginLeft="40dp"
    android:layout_marginTop="220dp" />

这显然不起作用(它不会崩溃但不会显示矩形).. 任何帮助将不胜感激! 谢谢!

最佳答案

创建一个 Java 文件并写入:

包 com.samplecanvas;

import java.util.ArrayList;

导入android.app.Activity; 导入 android.content.Context; 导入 android.graphics.Bitmap; 导入 android.graphics.Canvas; 导入 android.graphics.Color; 导入 android.graphics.Paint; 导入 android.graphics.Path; 导入 android.graphics.Rect; 导入 android.graphics.RectF; 导入 android.os.Bundle; 导入 android.view.MotionEvent; 导入 android.view.SurfaceHolder; 导入 android.view.SurfaceView; 导入 android.view.View; 导入 android.view.View.OnTouchListener; 导入 android.view.ViewGroup.LayoutParams; 导入 android.view.Window; 导入 android.view.WindowManager; 导入 android.widget.FrameLayout;

导入android.content.Context; 导入 android.graphics.Canvas; 导入 android.graphics.Color; 导入 android.graphics.Paint; 导入 android.view.View;

      public class SampleCanvasActivity extends View {
         vPaint paint = new Paint();

          public SampleCanvasActivity(Context context) {
              super(context);
           }

@Override
public void onDraw(Canvas canvas) {
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(3);
    canvas.drawRect(130, 130, 180, 180, paint);
    paint.setStrokeWidth(0);
    paint.setColor(Color.CYAN);
    canvas.drawRect(133, 160, 177, 177, paint );
    paint.setColor(Color.YELLOW);
    canvas.drawRect(133, 133, 177, 160, paint );

}

在你的xml中使用这个文件

像这样。

  <com.samplecanvas.SampleCanvasActivity
android:id="@+id/widthView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="150dp"
 />

关于android - 通过将 Canvas 视为 View 来绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740734/

相关文章:

android - 在单元测试中,如何在断言结果之前等待 RxJava2 Observable 完成

java - 如何在 RecyclerView 中为自定义 View 使用 setter?

Android 在路径对象上实现 onTouchListener

java - 如何在 Canvas 上水平居中文本

android - 如何在 Android 中找到形状的旋转点

android - 更改可聚焦 ViewGroup 中元素的阅读顺序

android - TextView 和 EditText 在 LinearLayout 中被截断

android - 在Android中,如何创建固定宽度的EditText?

android - 找不到提供程序类 SMACK 4.1.1 Android

java - Android:Snackbar 给出 ArrayIndexOutOfBoundsException