在 Android 画布上设置屏幕范围

Posted

技术标签:

【中文标题】在 Android 画布上设置屏幕范围【英文标题】:Setting the screen range on the Android canvas 【发布时间】:2021-06-18 08:50:06 【问题描述】:

我在 android 上实现了一个用于绘图的画布,但绘图视图填满了屏幕。我想调整这个屏幕的大小。我该怎么办?

一旦我将 MyView 设置为在 oncreate 方法中使用 setContentView 显示。

MainActivity.java

MyView view = new MyView(this);
setContentView(view);

这是在画布上绘画的部分。但是,如前所述,我想调整我可以绘制的范围。我不希望整个屏幕成为绘图视图。 MyView.java

public class MyView extends View 

    private Paint paint = new Paint();
    private Path path = new Path();
    private int x,y;

    public MyView(Context context)
        super(context);
    

    @Override
    protected void onDraw(Canvas canvas) 
        paint.setColor(Color.BLACK);
        //STROKE속성을 이용하여 테두리...선...
        paint.setStyle(Paint.Style.STROKE);

        //두께
        paint.setStrokeWidth(3);
        //path객체가 가지고 있는 경로를 화면에 그린다...
        canvas.drawPath(path,paint);
    


    @Override
    public boolean onTouchEvent(MotionEvent event) 
        x = (int)event.getX();
        y = (int)event.getY();

        switch(event.getAction())
            case MotionEvent.ACTION_DOWN:
                path.moveTo(x,y);
                break;
            case MotionEvent.ACTION_MOVE:
                x = (int)event.getX();
                y = (int)event.getY();
                Log.e("s",x+""+y);

                path.lineTo(x,y);
                break;
        

        //View의 onDraw()를 호출하는 메소드...
        invalidate();

        return true;
    

【问题讨论】:

【参考方案1】:

你可以像这样设置宽度和高度:

MyView view = new MyView(this);
setContentView(view);
view.setLayoutParams(new FrameLayout.LayoutParams(500, 500));

FrameLayout.LayoutParams 对于父 ViewGroup 可能会有所不同。如果parent是LinearLayout,应该是LinearLayout.LayoutParams,以此类推。

【讨论】:

以上是关于在 Android 画布上设置屏幕范围的主要内容,如果未能解决你的问题,请参考以下文章

确定视图是不是在屏幕上 - Android

Android:在画布上为单个路径的 alpha 设置动画

sh 在Androi设备上录制屏幕

fabric.js 调整画布大小以适应屏幕

如何在画布上为路径设置动画 - android

在画布上显示和隐藏对象?