首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android -在画布上绘图在Runnable中不起作用

Android是一个基于Linux的开源操作系统,主要用于移动设备和平板电脑。它由Google开发,并且在全球范围内得到广泛应用。Android操作系统具有开放性、灵活性和可定制性的特点,可以支持各种类型的应用程序开发。

在Android中,可以使用画布(Canvas)来绘制图形和文字。绘图操作通常在UI线程中进行,但是如果在UI线程中进行复杂的绘图操作,可能会导致界面卡顿或者无响应。为了避免这种情况,可以使用Runnable在后台线程中进行绘图操作。

然而,如果在Runnable中直接进行绘图操作,是不会起作用的。这是因为绘图操作必须在UI线程中进行,而Runnable在后台线程中执行,无法直接操作UI。为了解决这个问题,可以使用Handler或者View.post方法将绘图操作发送到UI线程中执行。

以下是一个示例代码,展示了如何在Runnable中绘制图形:

代码语言:txt
复制
public class MyView extends View {
    private Paint paint;

    public MyView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(100, 100, 50, paint);
    }
}

public class MainActivity extends AppCompatActivity {
    private MyView myView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myView = findViewById(R.id.my_view);

        // 在Runnable中绘制图形
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // 在UI线程中执行绘图操作
                myView.post(new Runnable() {
                    @Override
                    public void run() {
                        myView.invalidate(); // 刷新界面
                    }
                });
            }
        };

        // 在后台线程中执行绘图操作
        new Thread(runnable).start();
    }
}

在上述代码中,我们创建了一个自定义的View类MyView,重写了onDraw方法,在其中使用Canvas绘制了一个红色的圆形。然后,在MainActivity中,我们通过Runnable在后台线程中执行绘图操作,并通过myView.post方法将绘图操作发送到UI线程中执行,最后调用myView.invalidate方法刷新界面。

这样,就可以在Runnable中实现在画布上绘图的效果。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(十三)视图绘制的几个方法

在自定义视图中,有三个函数可以重写用于界面绘制,在视图创建过程中,三个函数的执行顺序依次是:onLayout、onDraw、dispatchDraw。 1、onLayout(boolean changed, int left, int top, int right, int bottom) :  onLayout用于定位该视图在上级视图中的位置,从其参数中就可以看出来。由于该函数没有画布,因此只适合绘制现成的视图控件。 2、onDraw(Canvas canvas) :  自定义控件一般是重写onDraw方法,在画布中绘制各种图形。 3、dispatchDraw(Canvas canvas) :  dispatchDraw与onDraw的区别在于:onDraw在绘制下级视图之前,而dispatchDraw在绘制下级视图之后,所以如果不想自己的绘图被下级视图覆盖的话,就要在dispatchDraw中进行绘制操作。为方便记忆,只要是从ViewGroup衍生出的视图,都用dispatchDraw,其他小控件都用onDraw。

03

3.6 自定义View (3.6.1)

Android给我们提供了丰富的组件库来创建丰富的UI效果,同时也提供了非常方便的拓展方法。通过继承Android的系统组件,我们可以非常方便地拓展现有功能,在系统组件的基础上创建新的功能,甚至可以直接自定义一个控件,实现Android系统控件所没有的功能。自定义控件作为Android中一个非常重要的功能,一直以来都被初学者认为是代表高手的象征。其实,自定义View并没有想象中的那么难,与其说是在自定义一个View,不如说是在设计一个图形,只有站在一个设计者的角度上,才可以更好地创建自定义View。我们不能机械地记忆所有绘图的API,而是要让这些API为你所用,结合现实中绘图的方法,甚至是PhotoShop的技巧,才能设计出更好的自定义View。

02
领券