首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何识别Android中图像的哪个区域(不仅仅是坐标)被触摸了?

我如何识别Android中图像的哪个区域(不仅仅是坐标)被触摸了?
EN

Stack Overflow用户
提问于 2011-03-07 17:55:27
回答 2查看 1.4K关注 0票数 7

我目前正在为我的最后一年项目开发一个Android应用程序,它应该可以帮助自闭症患者在什么时候受伤,并通过触摸人体图片来做到这一点。

我遇到的问题是,我不知道如何识别他们触摸的图像部分。图像是位图,作为ImageView中的BitmapDrawable保存。第一次被触摸时,它会通过动画和setFilledAfter(真的)放大,从那里当一个区域被触摸时,应用程序应该识别身体的主要部位(例如头部,左手...)。

要识别的区域不是方形的,因此检查坐标并不是一个真正的选择。我一直在考虑让每个部分都被识别为在原始图片上绘制的不同视图,但我也对其他解决方案持开放态度。

为了让事情变得更有趣,这款应用程序应该在不同的设备和分辨率上运行,无论是手机还是平板电脑。

非常感谢您的帮助。这真的是需要和欣赏的。

编辑

最后,我将尝试以下内容。我将有两份图像副本,一份用于展示,另一份在内部,我希望识别的区域被绘制成不同的颜色。因此,我们的计划是推断我从Touch事件中获得的坐标,以找出它对应于原始图像的像素,使用Bitmap.getPixel()来确定它是什么颜色,然后使用一个case语句返回每个部分的字符串。

我现在正在编写代码,如果有人对此感兴趣,请留言,我将发布每件事是如何解决的,我有人要求它,甚至正确的代码:D

感谢Shade给了我一些其他的选择来考虑。

EN

回答 2

Stack Overflow用户

发布于 2011-03-07 18:35:37

没有过多地考虑这一点,似乎你的想法-检测覆盖视图的接触-似乎是好的。

除此之外,坐标也是一个好主意-你只需要定义图像的命名区域,并检查接触点是否在某个区域内。可能会有点乏味,但与拥有20个视图相比,在复杂性方面可能会更好。它也肯定比在应用程序中添加20个额外的视图更快。

但最重要的是,我认为你应该进行实验,看看什么适合你的具体情况,因为其他一切都是猜测。

编辑:

如果选择使用多边形方法,则必须处理确定点是否位于多边形内部的问题(简短解释为see here)。

另外,关于视图,Android中的视图被定义为“占据屏幕空间的矩形区域”。因此,这消除了非矩形视图的可能性。也许你有可能在View中定义一个非矩形的可点击区域,但我不知道这是否可能。

票数 2
EN

Stack Overflow用户

发布于 2012-05-29 05:00:39

@Alex,谢谢你的想法,这对我很有帮助。这是我对您的解决方案的实现

代码语言:javascript
运行
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView imgView = (ImageView)this.findViewById(R.id.main_screen);
    imgView.setOnTouchListener(this);
}

@Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.red);
        switch(action) {
        case MotionEvent.ACTION_DOWN:
            int x = (int)event.getX();
            int y = (int)event.getY();
            int color = bMap.getPixel(x, y) ;
            ImageView testimage = (ImageView) findViewById(R.id.main_screen);
            switch(color) {
            case Color.RED:
                testimage.setImageDrawable(getResources().getDrawable(R.layout.red));
                break;
            case Color.BLUE:
                testimage.setImageDrawable(getResources().getDrawable(R.layout.blue));
                break;
            }
            break;
        case MotionEvent.ACTION_UP:
            int x1 = (int)event.getX();
            int y1 = (int)event.getY();
            color = bMap.getPixel(x1, y1) ;
            testimage = (ImageView) findViewById(R.id.main_screen);
            testimage.setImageResource(R.drawable.draw);
            // TODO: Rename constant upper-case.
            final int red = 1;
            final int blue = 2;
            switch(color){
            case Color.RED:
                Intent i = new Intent(this, NewActivity.class);
                i.putExtra(NewActivity.EXT_COLOR, red);
                startActivity(i);
                break;
            case Color.BLUE:
                i = new Intent(this, NewActivity.class);
                i.putExtra(NewActivity.EXT_COLOR, blue);
                startActivity(i);
                break;
            }
            break;
        case MotionEvent.ACTION_MOVE:
            x = (int) event.getX();
            y = (int)event.getY();
            testimage = (ImageView) findViewById(R.id.main_screen);
            color = bMap.getPixel(x, y);
            switch(color){
            case Color.RED:
                testimage.setImageDrawable(getResources().getDrawable(R.layout.red));
                break;
            case Color.BLUE:
                testimage.setImageDrawable(getResources().getDrawable(R.layout.blue));
                break;
            default:
                testimage = (ImageView) findViewById(R.id.main_screen);
                testimage.setImageResource(R.drawable.draw);
                break;
            }
            break;
        }
        return true;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5218184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档