2014-08-27 21 views
0

我想動態地添加imageview並將ontouch事件應用到他們。我得到了多張圖片從專輯動態添加到我的佈局。但是當我試圖獲取每個imagview的位置時,它總是顯示最後一個一個我放置而不是各自的圖像視圖位置。Dynamcillay創建imageview和onTouchEvent

這是我試過的代碼,

image = new ImageView(this); 
          RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( 
            RelativeLayout.LayoutParams.FILL_PARENT, 
            RelativeLayout.LayoutParams.FILL_PARENT); 

          params.addRule(RelativeLayout.CENTER_IN_PARENT); 

       image.setScaleType(ImageView.ScaleType.FIT_XY); 
          Bitmap bit=BitmapFactory.decodeFile(filePath); 
          image.setImageBitmap(bit); 
          ; 

          scrool.addView(image); 
          image.getLayoutParams().height = 400; 
          image.getLayoutParams().width = 300; 
          System.out.println("Data Recieved! " + filePath); 
          int[] values = new int[2]; 
          image.getLocationOnScreen(values); 
          System.out.println("x location::"+values[0]); 
          System.out.println(" y location::"+values[1]); 


          image.setOnTouchListener(this); 

          } 
          } 

我的觸摸事件,

 @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     System.out.println("in touch"); 
     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) v.getLayoutParams(); 
      switch (event.getAction()) 
      { 

      case MotionEvent.ACTION_DOWN: 
       savedMatrix.set(matrix); 
       start.set(event.getX(), event.getY()); 

       break; 
      case MotionEvent.ACTION_UP: 
       savedMatrix.set(matrix); 

       break; 
      case MotionEvent.ACTION_MOVE: 
       System.out.println("in move touch"); 
       int[] values = new int[2]; 
       image.getLocationOnScreen(values); 
       System.out.println("x location ::"+values[0]); 
       System.out.println(" y location ::"+values[1]); 
       int x_cord = (int) event.getRawX(); 
        int y_cord = (int) event.getRawY(); 
        if (x_cord > windowwidth) { 
         x_cord = windowwidth; 
        } 
        if (y_cord > windowheight) { 
         y_cord = windowheight; 
        } 
        params.leftMargin = x_cord; 
        params.topMargin = y_cord; 
        v.setLayoutParams(params); 
        break; 

      } 

      //notelayout.invalidate(); 
      scrool.invalidate(); 
     return gestureDetector.onTouchEvent(event); 
    } 
+0

烏爾一類級別變量的圖像對象,因此基準變化的每次ü創建一個新的圖像對象,修改圖像的參考,所以,很顯然,將有新的參考即最後一個 – Deb 2014-08-27 12:50:33

+0

感謝您的評論。如何更改參考becoz我是動態addng imageview。 – micky 2014-08-27 12:51:22

+0

而不是使它成爲一個類級別的變量使用'最終ImageView img =新的ImageView(this)'和繼續由@埃爾達Mensutov給出的答案。這應該工作。 – Deb 2014-08-27 12:54:30

回答

0

是,導致每一次當你叫image = new ImageView(this);你重寫參考。 作爲解決辦法,我建議你下面的代碼:

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
      ImageView imageView = (ImaveView)v; 
      //do something with imageView; 
+0

,那麼我在哪裏分配ontouch? – micky 2014-08-27 12:54:20

+0

咪咪,在同一個地方。 – 2014-08-27 12:56:30

+0

Mensultov我在我的ontouch事件中獲得了相關的佈局。可以看到我編輯的問題 – micky 2014-08-27 12:58:00