在自定义 ImageView 中绘制位图并获取 ImageView 的坐标,与设备无关
Draw Bitmap in Custom ImageView and get the Co-ordinates of the ImageView irrespective of the device
我想获取 ImageView
的坐标,与设备大小无关。
有什么办法吗!!
我尝试为 ImageView
创建特定尺寸,甚至为 Parent View
创建特定尺寸,但它不起作用。
我尝试了以下可能的方法。
int[] posXY = new int[2];
imageview.getLocationOnScreen(posXY);
int MoveX = posXY[0];
int MoveY = posXY[1];
我也试过Matrix,但是不行。
Matrix m = imageview.getImageMatrix();
试过下面的代码,但还是不行!!
我需要为同一点(位置)的所有设备获取相同的 {x,y} 坐标。
final float[] getPointerCoords(ImageView view, MotionEvent e)
{
final int index = e.getActionIndex();
final float[] coords = new float[] {
e.getX(index), e.getY(index)
};
Matrix matrix = new Matrix();
view.getImageMatrix().invert(matrix);
matrix.mapPoints(coords);
return coords;
}
这是绘制方法:
如果我在绘图中设置位图图像,它并不适合所有设备的屏幕。如果我用显示宽度和高度设置图像,我会得到不同的坐标。
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
super.draw(canvas);
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.subimage);
mBitmap = ((BitmapDrawable) drawable).getBitmap();
canvas.drawBitmap(mBitmap, 0, 0, null);
}
任何想法或帮助都会很有帮助。
你可以试试这个
imageview.post(new Runnable() {
@Override
public void run() {
int[] posXY = new int[2];
imageview.getLocationOnScreen(posXY);
int MoveX = posXY[0];
int MoveY = posXY[1];
Log.i("xy co-ordinate", "x "+MoveX, "y"+MoveY);
}
});
您必须先计算您的设备屏幕比例,
deviceWidth / screenHeight = ratio
然后你必须将它与你想要的坐标相乘:
ratio * xCoord = newXcoord; // and same for Y coord
通过这样做,您将保持所有设备尺寸的等效坐标。
您还可以声明相对于屏幕尺寸百分比的大小和坐标,例如:
x = 0.2 * deviceWidth // %20 of device width from left
终于找到了一些相关的解决方案,所有坐标都相同 devices.Using Activity,没有自定义 ImageView。
在 ImageView 上 OnTouch ..
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
final int index = e.getActionIndex();
final float[] coords = new float[] {
e.getX(index), e.getY(index)
};
Matrix matrix = new Matrix();
choosenImageView.getImageMatrix().invert(matrix);
matrix.mapPoints(coords);
return true;
}
使用Canvas
绘图
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.image);
Bitmap bmp= ((BitmapDrawable) drawable).getBitmap();
alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
canvas = new Canvas(alteredBitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(5);
matrix = new Matrix();
canvas.drawBitmap(bmp, matrix, paint);
我想获取 ImageView
的坐标,与设备大小无关。
有什么办法吗!!
我尝试为 ImageView
创建特定尺寸,甚至为 Parent View
创建特定尺寸,但它不起作用。
我尝试了以下可能的方法。
int[] posXY = new int[2];
imageview.getLocationOnScreen(posXY);
int MoveX = posXY[0];
int MoveY = posXY[1];
我也试过Matrix,但是不行。
Matrix m = imageview.getImageMatrix();
试过下面的代码,但还是不行!!
我需要为同一点(位置)的所有设备获取相同的 {x,y} 坐标。
final float[] getPointerCoords(ImageView view, MotionEvent e)
{
final int index = e.getActionIndex();
final float[] coords = new float[] {
e.getX(index), e.getY(index)
};
Matrix matrix = new Matrix();
view.getImageMatrix().invert(matrix);
matrix.mapPoints(coords);
return coords;
}
这是绘制方法:
如果我在绘图中设置位图图像,它并不适合所有设备的屏幕。如果我用显示宽度和高度设置图像,我会得到不同的坐标。
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
super.draw(canvas);
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.subimage);
mBitmap = ((BitmapDrawable) drawable).getBitmap();
canvas.drawBitmap(mBitmap, 0, 0, null);
}
任何想法或帮助都会很有帮助。
你可以试试这个
imageview.post(new Runnable() {
@Override
public void run() {
int[] posXY = new int[2];
imageview.getLocationOnScreen(posXY);
int MoveX = posXY[0];
int MoveY = posXY[1];
Log.i("xy co-ordinate", "x "+MoveX, "y"+MoveY);
}
});
您必须先计算您的设备屏幕比例,
deviceWidth / screenHeight = ratio
然后你必须将它与你想要的坐标相乘:
ratio * xCoord = newXcoord; // and same for Y coord
通过这样做,您将保持所有设备尺寸的等效坐标。
您还可以声明相对于屏幕尺寸百分比的大小和坐标,例如:
x = 0.2 * deviceWidth // %20 of device width from left
终于找到了一些相关的解决方案,所有坐标都相同 devices.Using Activity,没有自定义 ImageView。
在 ImageView 上 OnTouch ..
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
final int index = e.getActionIndex();
final float[] coords = new float[] {
e.getX(index), e.getY(index)
};
Matrix matrix = new Matrix();
choosenImageView.getImageMatrix().invert(matrix);
matrix.mapPoints(coords);
return true;
}
使用Canvas
绘图 Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.image);
Bitmap bmp= ((BitmapDrawable) drawable).getBitmap();
alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
canvas = new Canvas(alteredBitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(5);
matrix = new Matrix();
canvas.drawBitmap(bmp, matrix, paint);