在android中使用.png图像从imageView中删除额外空间

在android中使用.png图像从imageView中删除额外空间,android,image,imageview,Android,Image,Imageview,我在imageView中使用了.png图像,但方形透明背景仍然显示。我想从imageView中删除所有多余的空格。即使在imageView中使用.png图像,字符之间的额外空格仍然存在。我想给图像上色,这样就不需要额外的空间了。在所附的图片中,“3”内空白处的点击事件起到了我不想要的作用。我只想点击事件在“3”上工作 这是我的XML。里面没什么。此外,图中“3”周围的正方形是使用油漆绘制的,而不是代码,只是为了澄清问题。imageView有一个方形边框,我想根据“3”匹配它 这是这段代码的输出。

我在imageView中使用了.png图像,但方形透明背景仍然显示。我想从imageView中删除所有多余的空格。即使在imageView中使用.png图像,字符之间的额外空格仍然存在。我想给图像上色,这样就不需要额外的空间了。在所附的图片中,“3”内空白处的点击事件起到了我不想要的作用。我只想点击事件在“3”上工作

这是我的XML。里面没什么。此外,图中“3”周围的正方形是使用油漆绘制的,而不是代码,只是为了澄清问题。imageView有一个方形边框,我想根据“3”匹配它

这是这段代码的输出。我在代码中使用的图像是简单的“3”,这是一个.png图像,除3以外的区域是透明的。

解决问题的唯一方法是从PNG中删除多余的多余空间或在ImageView上设置负边距,尽管这是非常不推荐的做法。

解决问题的唯一方法是从PNG中删除多余的多余空间或在ImageView上设置负边距,尽管这是高度不推荐的。

如果我理解您的问题,您不希望在用户仅在“墨水”部分单击3时触发单击事件

为此,请声明一个
OnTouchListener()
获取匹配的点坐标并验证该点的颜色

image = (ImageView)findViewById(R.id.test_image);
image.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {

        int x = event.getX();
        int y = event.getY();

        Drawable imgDrawable = ((ImageView)view).getDrawable();
        Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap();

        int color = bitmap.getPixel(x, y);
        if ((color & 0xff000000) == 0x0)
            return false; //pixel is TRANSPARENT
        else {
            //code to execute
            return true;
        }
    }
});
这仅在图像未缩放时有效:


有关更完整的示例,请参见此

如果我理解您的问题,您不希望在用户仅在“墨水”部分单击3时触发单击事件

为此,请声明一个
OnTouchListener()
获取匹配的点坐标并验证该点的颜色

image = (ImageView)findViewById(R.id.test_image);
image.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {

        int x = event.getX();
        int y = event.getY();

        Drawable imgDrawable = ((ImageView)view).getDrawable();
        Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap();

        int color = bitmap.getPixel(x, y);
        if ((color & 0xff000000) == 0x0)
            return false; //pixel is TRANSPARENT
        else {
            //code to execute
            return true;
        }
    }
});
这仅在图像未缩放时有效:


有关更完整的示例,请参见此

这将解决您的问题

只需在imageview的xml文件中添加此属性:

android:adjustViewBounds=“true”


这将解决您的问题

只需在imageview的xml文件中添加此属性:

android:adjustViewBounds=“true”


您可以发布xml代码吗?我已经用xml代码更新了我的问题。您可以发布xml代码吗?我已经用xml代码更新了我的问题。谢谢您的回复。在尝试您的解决方案后,我已更新了问题。请提出任何建议。再次感谢,因为我说过,如果图像被缩放,您必须在此时实现代码。此外,如果不绘制(绘制透明),请删除代码的该部分。我不确定您是否能获得所需的准确度。感谢ramaral的回复。在尝试您的解决方案后,我已更新了问题。请提出任何建议。再次感谢,因为我说过,如果图像被缩放,您必须在此时实现代码。此外,如果不绘制(绘制透明),请删除代码的该部分。我不确定你是否能得到你需要的准确度。
image = (ImageView)findViewById(R.id.test_image);
image.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {

        int x = event.getX();
        int y = event.getY();

        Drawable imgDrawable = ((ImageView)view).getDrawable();
        Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap();

        int color = bitmap.getPixel(x, y);
        if ((color & 0xff000000) == 0x0)
            return false; //pixel is TRANSPARENT
        else {
            //code to execute
            return true;
        }
    }
});