如何从android中的视图中获取特定的子视图ID?

时间:2014-09-15 06:20:25

标签: android android-imageview android-view

我创建了一个包含FrameLayout的动态视图,其中包含ImageView个。现在,当我在框架布局上触摸特定图像时,我想知道ImageView的ID。

所以,这是我的问题:

  1. 如何设置ImageView

  2. 的ID
  3. 如何识别触及的特定ImageView

  4. 以下是代码的示例代码段:

    for (int j = 0; j < _pageslist.size(); j++) {
        FrameLayout frame = new FrameLayout(HLActivity.this);
        LayoutParams params = new FrameLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        frame.setLayoutParams(params);
    
        ImageView mainimage = new ImageView(HLActivity.this);
    
        mainimage.setImageBitmap(ReusableMethods.getBitmapFromURL(_pageslist.get(j)
                .getThumbnail().toString()));
        mainimage.setScaleType(ScaleType.FIT_XY);
        mainimage.setLayoutParams(params);
    
        frame.addView(mainimage, params);
    
        if (_pageslist.get(j).isHasspots()) {
            System.out.println(_pageslist.get(j).isHasspots());
            System.out.println(_pageslist.get(j).getSPOTS());
    
            ArrayList<Hotspot> hotspots_array = _pageslist.get(j).getSPOTS();
            for (int i = 0; i < hotspots_array.size(); i++) {
                Hotspot hotspot = hotspots_array.get(i);
                System.out.println("hotspot :: " + hotspot.getType());
    
                ImageView spotimage = new ImageView(HLActivity.this);
                spotimage.setBackgroundColor(Color.parseColor("#88676767"));
    
                float startx, starty, endx, endy;
                startx = (float) (Float.parseFloat(hotspot.getX()) * ivw) / 100;
                starty = (float) (Float.parseFloat(hotspot.getY()) * ivh) / 100;
                endx = (float) ((Float.parseFloat(hotspot.getX()) + 
                        Float.parseFloat(hotspot.getWidth())) * ivw) / 100;
                endy = (float) ((Float.parseFloat(hotspot.getY()) + 
                        Float.parseFloat(hotspot.getHeight())) * ivh) / 100;
    
                params = new FrameLayout.LayoutParams(
                        (int) ((Float.parseFloat(hotspot.getWidth()) * ivw)/100),
                        (int) ((Float.parseFloat(hotspot.getHeight()) * ivh)/100));
    
                params.leftMargin = (int) startx;
                params.topMargin = (int) starty;
    
                frame.addView(spotimage, params);
            }
        }
        _view.add(frame);
    }
    
    adapter = new ViewPagerAdapter(HLActivity.this, _view,
            _pageslist, ivw, ivh, getStatusBarHeight());
    viewPager.setAdapter(adapter);
    

2 个答案:

答案 0 :(得分:1)

你必须为你的形象设置ontouch监听器:

yourImage.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent arg1) {
            // this is your id you can pass it
            v.getId()
            // TODO Auto-generated method stub
            return false;
        }
    });

答案 1 :(得分:0)

如果您只想识别被触摸的视图,还可以将监听器添加到动态图像视图中。如下所示

spotimage.setOnClickListener(new OnClickListener() {`           
                @Override
                public void onClick(View v) {

                }
            });

并且在onClick方法中,您可以编写特定于每个图像视图的代码,或者如果您严格要为图像视图设置ID,则可以使用
spotimage.setId(1)
Id可以是任何整数值,但您必须确保其他id值不会发生冲突。在OnClickListenet等任何监听器中,您可以通过int temp = view.getId();

检查图像视图ID