我在另一个视图的顶部有一个自定义视图,我想在其中绘制内容。画布具有width 1080
和height 1920
(纵向固定)。我已经确认这个视图确实位于另一个视图的顶部(相机预览)。但是,onDraw
函数没有绘制任何可见的内容。当我尝试canvas.drawRect(0, 0, 10, 10)
时,我看到一个蓝色矩形,但当我将左上角的位置更改为(100, 100)
时,屏幕上没有任何内容。 (100, 100)
肯定在我的屏幕尺寸范围内,但为什么矩形不显示?
public class OverlayView extends View {
private Paint paint;
public BarcodeOverlayView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
paint = new Paint();
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(100, 100, 50, 50, paint);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
答案 0 :(得分:0)
答案 1 :(得分:0)
对Canvas.drawRect(100, 100, 50, 50, paint)
的调用不会绘制任何内容,因为传递的参数错误的方式应该是绘制的所需矩形所代表的点,我们称之为反转的矩形。
如果你看一下Canvas.drawRect(float, float, float, float, Paint)
方法的描述(JavaDoc),你会发现第一个参数是左,第二个是顶部,第三个是正确,第四个是底部,这是您的问题所在,正确(50)点位于左侧强> X轴上的(100)点,底部(50)点在Y轴上的顶部(100)点之前。
因此,如果我假设通过调用Canvas.drawRect(100, 100, 50, 50, paint)
,您希望在 X处绘制 50 px 宽且 50 px 高的矩形 100 px 的位置以及 100 px 的 Y 位置您应该可以通过调用Canvas.drawRect(100, 100, 150, 150, paint)
来实现这一目标。