您现在的位置是:主页 > news > 西装定制/seo优化网络
西装定制/seo优化网络
admin2025/6/4 19:13:04【news】
简介西装定制,seo优化网络,建设网站的目标,南京网站建设 seo最近用Canvas画图,发现画图的过程不能实时显示在ImageView上,虽然尝试了以下三种方法,仍然不行 按照google的一些建议添加了setWillNotDraw(false); 也不行 把画图过程写在onDraw里面,每隔一段时间imageView.invalidate(), 也不行…
西装定制,seo优化网络,建设网站的目标,南京网站建设 seo最近用Canvas画图,发现画图的过程不能实时显示在ImageView上,虽然尝试了以下三种方法,仍然不行
按照google的一些建议添加了setWillNotDraw(false); 也不行
把画图过程写在onDraw里面,每隔一段时间imageView.invalidate(), 也不行…
最近用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 ArrayList<>();private List<MyPoint> pointListForFly = new ArrayList<>();public void setBufferedReaderForWa(BufferedReader bufferedReaderForWa) {this.bufferedReaderForWa = bufferedReaderForWa;}public void setBufferedReaderForNiu(BufferedReader bufferedReaderForNiu) {this.bufferedReaderForNiu = bufferedReaderForNiu;}public void setBufferedReaderForFly(BufferedReader bufferedReaderForFly) {this.bufferedReaderForFly = bufferedReaderForFly;}public void setCurrentBuffer(BufferedReader currentBuffer) {this.currentBuffer = currentBuffer;}private BufferedReader bufferedReaderForWa;private BufferedReader bufferedReaderForNiu;private BufferedReader bufferedReaderForFly;private BufferedReader currentBuffer = bufferedReaderForWa;private String readline = null;public CanvasView(Context context) {super(context);setWillNotDraw(false);myHandler = new MyHandler(this);initPaint();}public CanvasView(Context context, AttributeSet attrs) {super(context, attrs);setWillNotDraw(false);myHandler = new MyHandler(this);initPaint();}public CanvasView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);setWillNotDraw(false);myHandler = new MyHandler(this);initPaint();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);drawPoints(canvas);getNewPointByBundle();}private void initPaint() {this.paint = new Paint();paint.setColor(Color.rgb(13, 117, 6));paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth((float) 10.0);paint.setAntiAlias(true);paint.setAlpha(245);}private void setPaintColor(int red, int green, int black) {paint.setColor(Color.rgb(red, green, black));}private void getNewPointByBundle() {int bundle = 20;for (int i = 0; i < bundle; i++) {getNewSinglePoint();}}private void getNewSinglePoint() {if (paint != null && currentBuffer != null) {try {readline = currentBuffer.readLine();if (readline != null) {if (readline.endsWith(".")) {String startAndEnd = readline.substring(0, readline.length() - 1);final String[] points = startAndEnd.split(",");if (points.length != 4) {logger.info("bad point!");} else {Float startX = Float.valueOf(points[0]);Float startY = Float.valueOf(points[1]);Float endX = Float.valueOf(points[2]);Float endY = Float.valueOf(points[3]);MyPoint thispoint = new MyPoint(startX, startY, endX, endY);if (currentBuffer == bufferedReaderForWa) {pointListForWa.add(thispoint);} else if (currentBuffer == bufferedReaderForNiu) {pointListForNiu.add(thispoint);} else {pointListForFly.add(thispoint);}}}myHandler.sendEmptyMessageDelayed(1, 1);} else {if (currentBuffer == bufferedReaderForWa) {currentBuffer = bufferedReaderForNiu;myHandler.sendEmptyMessageDelayed(1, 1);} else if (currentBuffer == bufferedReaderForNiu) {currentBuffer = bufferedReaderForFly;myHandler.sendEmptyMessageDelayed(1, 1);} else {currentBuffer = null;}}} catch (IOException e) {e.printStackTrace();}}}private void drawPoints(Canvas canvas) {if (paint != null) {setPaintColor(13, 117, 6);DrawPointWithList(canvas, pointListForWa);setPaintColor(234, 153, 153);DrawPointWithList(canvas, pointListForNiu);setPaintColor(204, 102, 255);DrawPointWithList(canvas, pointListForFly);}}private void DrawPointWithList(Canvas canvas, List<MyPoint> pointList) {for (MyPoint myPoint : pointList) {Float startX = myPoint.getStartX();Float startY = myPoint.getStartY();Float endX = myPoint.getEndX();Float endY = myPoint.getEndY();canvas.drawLine(startX, startY, endX, endY, paint);}}private class MyHandler extends Handler {private CanvasView canvasView;public MyHandler(CanvasView canvasView) {this.canvasView = canvasView;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);canvasView.invalidate();}}private class MyPoint {private Float startX;private Float startY;private Float endX;private Float endY;public MyPoint(Float startX, Float startY, Float endX, Float endY) {this.startX = startX;this.startY = startY;this.endX = endX;this.endY = endY;}public Float getStartX() {return startX;}public Float getStartY() {return startY;}public Float getEndX() {return endX;}public Float getEndY() {return endY;}}}