android - Android Canvas 保存不同颜色的油漆
问题描述
我有一个小问题,我正在尝试制作油漆,到目前为止一切都很好,但是,我的问题是,当你想用不同的颜色绘制时,我之前用一种颜色绘制的颜色会变成相同的颜色,试着按照一个例子如何解决这个,但在我的情况下,我有一个网格,我不太清楚如何应用它,希望你能帮助我,谢谢。
这是我的drawClass
公共类 AreaDraw 扩展视图 {
private Path mPath;
private int numColumns, numRows;
private int cellWidth, cellHeight;
private Paint paint = new Paint();
private boolean[][] cellChecked;
public static int colorPen = Color.BLACK;
private int currentColor;
private ArrayList<Path> paths = new ArrayList<>();
public AreaDraw(Context context){
super(context);
}
public AreaDraw(Context context, AttributeSet attrs){
super(context, attrs);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
}
public void setNumColumns(int columns) {
this.numColumns = columns;
calculateDimensions();
}
public int getNumColumns() {
return numColumns;
}
public void setNumRows(int rows) {
this.numRows = rows;
calculateDimensions();
}
public int getNumRows() {
return numRows;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
calculateDimensions();
}
private void calculateDimensions() {
if (numColumns < 1 || numRows < 1) {
return;
}
cellWidth = getWidth() / numColumns;
cellHeight = getHeight() / numRows;
cellChecked = new boolean[numColumns][numRows];
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.drawColor(Color.WHITE);
if (numColumns == 0 || numRows == 0) {
return;
}
int width = getWidth();
int height = getHeight();
for (int i = 0; i < numColumns; i++) {
for (int j = 0; j < numRows; j++) {
if (cellChecked[i][j]) {
canvas.drawRect(i * cellWidth, j * cellHeight, (i + 1) * cellWidth, (j + 1) * cellHeight, paint);
Toast.makeText(getContext(), "dibujo", Toast.LENGTH_SHORT).show();
}
}
}
for (int i = 1; i < numColumns; i++) {
canvas.drawLine(i * cellWidth, 0, i * cellWidth, height, paint);
paint.setColor(Color.BLACK);
}
for (int i = 1; i < numRows; i++) {
canvas.drawLine(0, i * cellHeight, width, i * cellHeight, paint);
paint.setColor(Color.BLACK);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
pen(event);
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
//Erase
public void erase(){
colorPen = Color.WHITE;
setColor();
paint.setColor(currentColor);
}
//Paint
public void pen(MotionEvent event){
int column = (int) (event.getX() / cellWidth);
int row = (int) (event.getY() / cellHeight);
setColor();
paint.setColor(currentColor);
cellChecked[column][row] = !cellChecked[0][0];
Toast.makeText(getContext(), "dibujoPen", Toast.LENGTH_SHORT).show();
invalidate();
}
public int setColor(){
currentColor = colorPen;
return currentColor;
}
//Set Colors
public void blackColor(){
colorPen = Color.BLACK;
}
public void redColor(){
colorPen = Color.RED;
}
public void greenColor(){
colorPen = Color.GREEN;
}
public void yellowColor(){
colorPen = Color.YELLOW;
}
public void blueColor(){
colorPen = Color.BLUE;
}
public void magentaColor(){
colorPen = Color.MAGENTA;
}
public void cyanColor(){
colorPen = Color.CYAN;
}
public void whiteColor(){
colorPen = Color.WHITE;
}
}` 在此处输入图片描述
解决方案
推荐阅读
- javascript - 如何在expressJS中处理POST请求中的参数
- node.js - 开玩笑测试与 ssh2-sftp-client 库集成的功能
- python - 如何修复错误:selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互
- python - 从不同的一个 socketio 命名空间访问方法
- python-3.x - 使用 Python 的诗歌将我的最新版本的包从工作目录安装到我的本地环境中
- branch.io - iOS branch.io SDK 网络故障
- r - 创建表作为输出
- excel - 将两列数据合并为一个变量
- javascript - Vue 实例方法返回格式化属性
- r - 每次加载一行以查找错误存在的位置