gpt4 book ai didi

android - 如何使用 mapPoints?我需要根据矩阵移动绘制点(坐标)

转载 作者:行者123 更新时间:2023-11-29 01:37:54 25 4
gpt4 key购买 nike

我有一个自定义 imageView,其中有一个矩阵,我可以拖动、缩放,现在我也可以在其上绘制和删除点(坐标)。

问题是:如何在缩放或拖动矩阵后移动这些点

我已将所有点保存在(Mark 和 Marking 是自定义类,只有 2 个变量(x,y)float 或 int 用于保存坐标

static ArrayList <Marking> listaPtos = new ArrayList<Marking>(); 
static ArrayList <Mark> listaMarcas = new ArrayList<Mark>();

我如何保存坐标?使用 mapPoints?我试过了,但我不知道正确的公式

void saveCoordinates(float x, float y){
Log.i("guardaCoordenadas","de float");
Mark m = new Mark(x,y);
listaMarcas.add(m);
Log.i("marca",""+m.x+"-"+m.y);
Main.txtCont.setText(x+"-"+y);
guardaCoordenadas(lastTouchX,lastTouchY);
}
void guardaCoordenadas(int x, int y){
Log.i("guardaCoordenadas","de int");
Marking m = new Marking(x,y);
listaPtos.add(m);
Log.i("listaPtos0",""+m.x+"-"+m.y);
}

这是我的onDraw

public void onDraw(Canvas c){
Log.d("onDraw","pinta="+pinta);
c.drawBitmap(bitmap, matrix, paintFondo);
c.drawPath(path,new Paint());
if(pinta){
Log.d("activando","clickPinta");
//this.setOnTouchListener(null);
this.setOnTouchListener(clickPinta);
}
else{
Log.d("activando","clickImagen");
//this.setOnTouchListener(null);
this.setOnTouchListener(clickImagen);
}

if(listaPtos!=null){
Log.i("pintando",listaPtos.size()+" puntos");
/*for(Marking mark:listaPtos){
c.drawBitmap(cruz, mark.x, mark.y, paintPuntos);
//c.drawCircle(mark.x, mark.y, 20, new Paint());
}*/
for(Mark mark:listaMarcas){
//c.drawBitmap(cruz, mark.x, mark.y, paintPuntos);
c.drawBitmap(cruz, mark.x, mark.y, new Paint());
}
}
}

这是我尝试用于移动点的方法:

void moveCoordenadas(float x, float y){
if (mode==DRAG){
for (int i=0; i<listaMarcas.size();i++){
Mark mark = listaMarcas.get(i);
float [] coor = new float[2];
coor[0]=mark.x;
coor[1]=mark.y;
matrix.mapPoints(coor);
mark.x=coor[0];
mark.y=coor[1];
listaMarcas.set(i, mark);
}
}
if (mode==ZOOM){

}

}

我一开始只是尝试拖动,因为比较容易

感谢您的帮助和时间,如果您需要更多代码,请说出来

最佳答案

如果有人有同样的问题,我用 matrix.mapPoints() 解决

(mapPoints 将绝对坐标转换为相对坐标)

这里是代码:

void moveCoordinates(){
for (int i=0; i<listaPtos.size();i++){
Marking pto = listaPtos.get(i);//absolutes coordinates
Mark mark = listaMarcas.get(i);//relatives coordinates
float[]coor = new float[2];
coor[0]=pto.x;
coor[1]=pto.y;
matrix.mapPoints(coor);
mark.setX(coor[0]);
mark.setY(coor[1]);
listaMarcas.set(i, mark);
}

}

关于android - 如何使用 mapPoints?我需要根据矩阵移动绘制点(坐标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26713885/

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