gpt4 book ai didi

android - 如何更新 Canvas 绘制文本而不是重绘 Canvas

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:07 25 4
gpt4 key购买 nike

我现在可以在运动 View 的 Canvas 上绘制文本,问题是当我绘制文本并在同一 Canvas 上进行下一次绘制时,我的绘制文本正在消失,我的意思是屏幕正在重绘,因为我想要无效保留我以前的绘图并在同一 Canvas 上绘制新绘图我要怎么做?

@Override
protected void onDraw(Canvas canvas) {
Paint hint = new Paint();
path = new Path();
mTextPaths = new ArrayList<Path>();
Log.v("getting mtextpaths", mTextPaths.toString());

int m;
if (strgettile != null) {
for (m = 0; m < strgettile.length(); m++) {
System.out.println(strgettile.charAt(m));
char convertst = strgettile.charAt(m);
characterToString = Character.toString(convertst);

// canvas.drawText(characterToString, x, y, hint);
// canvas.drawText(characterToString, m
// * width + x, m * height + y, foreground); //its working in
// cross
// canvas.drawText(characterToString, x, m * height + y,
// foreground); //its working for vertical
// canvas.drawText(characterToString, m
// * width + x, y, foreground); //its working in horizontal
// setSelectedTile(tile);
if (getorientation.equalsIgnoreCase("Horizontal")) {
canvas.drawText(characterToString, m * width + positionX,
positionY, foreground); // for motion event
hint.setColor(Color.BLACK);
hint.setTextSize(45);
foreground.getTextPath(characterToString, 0,
characterToString.length(), positionX * 2 / 3,
positionY - 4, path);

} else {
canvas.drawText(characterToString, positionX, m * height
+ positionY, foreground);
hint.setColor(Color.BLACK);
hint.setTextSize(45);
foreground.getTextPath(characterToString, 0,
characterToString.length(), positionX * 2 / 3,
positionY - 4, path);


}


}

}

public void setSelectedTile(String tile, String strorientations) {
// TODO Auto-generated method stub
Log.v("getting string in puzzle view ", tile);
strgettile = tile;
getorientation = strorientations;
mTextPaths.add(path);
invalidate();


}

最佳答案

  1. 每当您调用无效()方法。所以我维护所有的文本和位置在 arraylist 中,并在每次单击 Canvas 时绘制 Canvas 。
  2. 这是解决您问题的方法之一。 Canvas 只是一个位图。无论你在上面画什么,它都是永久的。有办法处理它,但大多数实现只是重新绘制整个 Canvas 在每一遍上。

    下面是代码 fragment :

    public class PuzzleView extends View {
    private static final String TAG = "Sudoku";
    private float width; // width of one tile
    private float height; // height of one tile
    private int selX; // X index of selection
    private int selY; // Y index of selection
    private final Rect selRect = new Rect();
    private final Game game;
    float positionX = 5;
    float positionY = 15;
    ArrayList<Kirti> data = new ArrayList<Kirti>();
    String strgettile = null;

    Paint foreground = new Paint(Paint.ANTI_ALIAS_FLAG);
    String getorientation;

    String characterToString;
    Path path;
    List<Path> mTextPaths = new ArrayList<Path>();

    public PuzzleView(Context context) {
    super(context);
    this.game = (Game) context;
    setFocusable(true);
    setFocusableInTouchMode(true);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    width = w / 9f;
    height = h / 9f;
    // getRect(selX, selY, selRect);
    Log.d(TAG, "onSizeChanged: width " + width + ", height " + height);
    super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas) {
    // super.onDraw(canvas);
    // canvas.save();
    // canvas.restore();
    // Draw the background...
    Paint background = new Paint();
    background.setColor(getResources().getColor(R.color.puzzle_background));
    canvas.drawRect(0, 0, getWidth(), getHeight(), background);

    // Draw the board...
    // Define colors for the grid lines
    Paint dark = new Paint();
    dark.setColor(getResources().getColor(R.color.puzzle_dark));

    Paint hilite = new Paint();
    hilite.setColor(getResources().getColor(R.color.puzzle_hilite));

    Paint light = new Paint();
    light.setColor(getResources().getColor(R.color.puzzle_light));

    // Draw the minor grid lines
    for (int i = 0; i < 9; i++) {
    canvas.drawLine(0, i * height, getWidth(), i * height, light);
    canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1,
    hilite);
    canvas.drawLine(i * width, 0, i * width, getHeight(), light);
    canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(),
    hilite);
    }

    // Draw the major grid lines
    for (int i = 0; i < 9; i++) {
    if (i % 3 != 0)
    continue;
    canvas.drawLine(0, i * height, getWidth(), i * height, dark);
    canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1,
    hilite);
    canvas.drawLine(i * width, 0, i * width, getHeight(), dark);
    canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(),
    hilite);
    }

    Paint hint = new Paint();
    path = new Path();

    int m;
    for (int i = 0; i < data.size(); i++) {
    String strgettile = data.get(i).getSt();

    if (strgettile != null) {
    for (m = 0; m < strgettile.length(); m++) {
    System.out.println(strgettile.charAt(m));
    char convertst = strgettile.charAt(m);
    characterToString = Character.toString(convertst);

    if (data.get(i).getorientation
    .equalsIgnoreCase("Horizontal")) {

    canvas.drawText(characterToString, m
    * data.get(i).getWidth()
    + data.get(i).getXposition(), data.get(i)
    .getYposition(), foreground); // for motion
    // event

    hint.setColor(Color.BLACK);
    hint.setTextSize(45);

    } else {
    // mTextPaths.add(strgettile);
    // for (int i = 0; i < mTextPaths.size(); i++) {

    canvas.drawText(characterToString, data.get(i)
    .getXposition(), m * data.get(i).getHeight()
    + data.get(i).getYposition(), foreground);
    // }

    hint.setColor(Color.BLACK);
    hint.setTextSize(45);

    }

    }
    try {
    if (foreground != null) {
    foreground.getTextPath(characterToString, 0,
    characterToString.length(), data.get(i)
    .getXposition() * 2 / 3, data.get(i)
    .getYposition() - 4, path);
    }

    } catch (Exception e) {

    }

    }
    }

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_DOWN)
    game.showKeypadOrError(selX, selY);
    foreground.setColor(getResources().getColor(R.color.puzzle_foreground));
    foreground.setStyle(Style.FILL);
    foreground.setTextSize(height * 0.75f);
    foreground.setTextScaleX(width / height);
    foreground.setTextAlign(Paint.Align.CENTER);
    FontMetrics fm = foreground.getFontMetrics();
    positionX = (int) event.getX();
    positionY = (int) event.getY() - (fm.ascent + fm.descent) / 2;

    return true;
    }

    public void setSelectedTile(String tile, String strorientations) {
    // TODO Auto-generated method stub
    Log.v("getting string in puzzle view ", tile);
    if (game.setTileIfValid(selX, selY, tile)) {
    strgettile = tile;
    getorientation = strorientations;
    mTextPaths.add(path);
    data.add(new Kirti(positionX, positionY, strgettile,
    getorientation, width, height));
    invalidate();
    Log.v("getting mtextpaths", mTextPaths.toString());
    }

    }}

The model class is:

public class Kirti {
float positionX;
float positionY;
String strgettile;
String getorientation;
float width;
float height;
public Kirti(float positionX, float positionY, String strgettile,
String getorientation, float width, float height) {
super();
this.positionX = positionX;
this.positionY = positionY;
this.strgettile = strgettile;
this.getorientation = getorientation;
this.width = width;
this.height = height;
}
public float getPositionX() {
return positionX;
}
public void setPositionX(float positionX) {
this.positionX = positionX;
}
public float getPositionY() {
return positionY;
}
public void setPositionY(float positionY) {
this.positionY = positionY;
}
public String getStrgettile() {
return strgettile;
}
public void setStrgettile(String strgettile) {
this.strgettile = strgettile;
}
public String getGetorientation() {
return getorientation;
}
public void setGetorientation(String getorientation) {
this.getorientation = getorientation;
}
public float getWidth() {
return width;
}
public void setWidth(float width) {
this.width = width;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}}

关于android - 如何更新 Canvas 绘制文本而不是重绘 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27170618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com