如何在ScrollView中计算ImageView的触摸位置,考虑缩放系数?

时间:2012-12-16 14:01:54

标签: android android-imageview android-scrollview

我的图像应该可以在某些区域点击,比如该图像中的26个区域。 最好的方法是什么?

enter image description here

我制作了一个大小相同的图像,图像中的每个可点击区域都有特定的颜色,带有白色背景,因此当点击图像时,我可以获得该位置的第二个图像的像素颜色并实现哪个区域是点击。

问题是,我需要在ScrollView中显示图片,并调整图片大小以适应屏幕宽度。我知道我可以使用event.getRawY() + sv.getScrollY();计算点击的偏移量,但是如何计算缩放系数?

实际上由于两个图像大小相同,我需要考虑缩放因子来计算点击位置,以找到第二个图像中该像素的精确位置。

2 个答案:

答案 0 :(得分:2)

我认为这个剪辑会帮助你。

   @Override
public boolean onTouch(View v, MotionEvent event) {
    if (v.getId() == R.id.imageView1 || v.getId() == R.id.image_scrollview) {

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startX = (int) event.getX();
            startY = (int) event.getY();
            break;
        case MotionEvent.ACTION_UP:
            int cordinate_Y = (int) ((event.getY() + v.getScrollY()) / diffH);
            int cordinate_X = (int) ((event.getX() + v.getScrollX()) / diffW);
            if ((Math.abs((int) event.getX() - startX) > 10)
                    || (Math.abs((int) event.getY() - startY) > 10)) {
                break;
            }

            int pixelColor = bitmap.getPixel(cordinate_X, cordinate_Y);
            if (pixelColor != -1) {
                showDetails(texts[map.get(pixelColor)],
                        images[map.get(pixelColor)],
                        titles[map.get(pixelColor)]);

            }

            break;

        }
    }

    return false;
}

答案 1 :(得分:0)

在您的情况下,使用WebView可能会更容易一些。您可以使用<map><area>创建可点击区域,并使用JavaScript

向您的应用发送回调