如何解决Android Canvas画图,不能动态展示在界面上的问题

最近用Canvas画图,发现画图的过程不能实时显示在ImageView上,虽然尝试了以下三种方法,仍然不行

按照google的一些建议添加了setWillNotDraw(false); 也不行

把画图过程写在onDraw里面,每隔一段时间imageView.invalidate(), 也不行。发现onDraw没有被调用的到。

后来又更改代码使得onDraw隔一段时间被调用一次,但是每次onDraw调用,都是在一个新的传进来的Canvas上画图,所以上次onDraw的图像是被清空的。而且onDraw只能通过消息队列触发invalidate(),才能把onDraw的结果呈现在imageView上,手动调用onDraw,手动传入Canvas,是不能正确呈现图像的。

那么怎么样才能让Canvas展现出动态的画图过程呢?重写了一个ImageView类,在这个类里面,用handler消息机制去控制每隔一段时间调用一次onDraw,然后每次onDraw的时候把以前画过得点重画一遍,由于画的速度非常快,视觉上呈现的效果就是动态的画图效果。

废话不多说,代码如下,这里想用三种颜色画三种不同的小动物,所以有三个队列存储各个小动物的坐标点。

package com.example.shirley.shirleysdemo.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

/**
 * Created by shirley on 3/13/18.
 */

public class CanvasView extends AppCompatImageView {

    private Logger logger = Logger.getLogger(CanvasView.class.toString());

    private Paint paint;
    public MyHandler myHandler;
    private List<MyPoint> pointListForWa = new ArrayList<>();
    private List<MyPoint> pointListForNiu = new Ar
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值