2015-10-15 52 views
1

我有一个的LinearLayout,其中包含几个子ImageView的(新增ImageViews动态地的LinearLayout平铺)儿童的位置。我怎样才能做长按子视图(ImageView的)时,你得到的是LinerLayout子视图位置?如何获得线性布局

新增setTag:

image.setImageBitmap(resizedBitmap); 
image.setTag(fullUrl); 



imageViewLinearLayout.setOnLongClickListener(new View.OnLongClickListener(){ 
    @Override 
    public boolean onLongClick(View v) { 

      Log.d("Mobi","Path :"+v.getTag()); 

      return false; 
     } 
}); 

新增设置标签的文件路径,但返回v.getTag()为空“

+0

尝试'getLeft()'/'的getX()' – pskink

+0

确定什么是“位置”你的意思是? (x,y)在屏幕上的位置? (x,y)在父布局中的位置?子视图数组中的索引? – pskink

回答

0

添加此的test.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <Button 
     android:id="@+id/btnAddImage" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Add Image" /> 

    <HorizontalScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1.5" 
     android:fadingEdge="none" 
     android:orientation="horizontal" > 

     <LinearLayout 
      android:id="@+id/lnrParent" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 
     </LinearLayout> 
    </HorizontalScrollView> 

</TableLayout> 

和另一个布局lay_image.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/lnrChild" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/btnExample" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <ImageView 
     android:id="@+id/imgView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="50sp" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

这里编码

setContentView(R.layout.test); 

     final LinearLayout LnrLayout = (LinearLayout) findViewById(R.id.lnrParent); 

     Button BtnAddImage = (Button) findViewById(R.id.btnAddImage); 

     BtnAddImage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final LinearLayout LnrChildLayout = (LinearLayout) getLayoutInflater() 
         .inflate(R.layout.lay_image, null); 
       LnrChildLayout.setLayoutParams(new LayoutParams(
         ViewGroup.LayoutParams.MATCH_PARENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT)); 

       LnrLayout.addView(LnrChildLayout); 

       int indexValue = LnrLayout.indexOfChild(LnrChildLayout); 
       LnrChildLayout.setTag(Integer.toString(indexValue)); 

       final ImageView ImgView = (ImageView) LnrChildLayout 
         .findViewById(R.id.imgView); 

       int ImagePosition = LnrChildLayout.indexOfChild(ImgView); 
       ImgView.setTag(Integer.toString(ImagePosition)); 

       ImgView.setOnLongClickListener(new OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View v) { 

         // get Position 
         String strPosition = (String) v.getTag(); 
         Toast.makeText(test.this, 
           "ImageView getTag : >" + strPosition, 
           Toast.LENGTH_SHORT).show(); 
         // getId 
         int strId = v.getId(); 
         Toast.makeText(test.this, 
           "ImageView getId : >" + strId, 
           Toast.LENGTH_SHORT).show(); 

         return true; 

        } 
       }); 

       LnrChildLayout 
         .setOnLongClickListener(new OnLongClickListener() { 
          @Override 
          public boolean onLongClick(View v) { 

           String strPosition = (String) v.getTag(); 
           Toast.makeText(test.this, "" + strPosition, 
             Toast.LENGTH_SHORT).show(); 

           return true; 
          } 
         }); 

       Button BtnExample = (Button) LnrChildLayout 
         .findViewById(R.id.btnExample); 
       int ButtonPosition = LnrChildLayout.indexOfChild(BtnExample); 
       BtnExample.setTag(Integer.toString(ButtonPosition)); 

       BtnExample.setOnLongClickListener(new OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View v) { 

         String strPosition = (String) v.getTag(); 
         Toast.makeText(test.this, 
           "Button getTag : >" + strPosition, 
           Toast.LENGTH_SHORT).show(); 

         int strId = v.getId(); 
         Toast.makeText(test.this, "Button getId : >" + strId, 
           Toast.LENGTH_SHORT).show(); 

         return true; 
        } 
       }); 

      } 
     }); 
0

增加您的看法Long press listener动态,然后的界面中你监听器使用View.getLocationOnScreen()和/或getLocationInWindow()

0

试试这个

list.setOnLongItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onLongItemClick(AdapterView<?> arg0, View viewRow, int pos, 
       long arg3) { 
       int wantedPosition = pos; // Whatever position you're looking for 
       int firstPosition = list.getFirstVisiblePosition() - list.getHeaderViewsCount(); // This is the same as child #0 
       int wantedChild = wantedPosition - firstPosition; 
////////////////the wantedChild value , is your position 
     } 
    }); 
0

可以使用的ViewGroup的indexOfChild方法。

我建立一个小片段来检查你的用例(类似)。我有三个按钮动态地添加到一个的LinearLayout然后clickHandler事件连接到按钮。你可以使它通用,使其实际上有用。

 // Other code 
     final LinearLayout layout = (LinearLayout) findViewById(R.id.layout); 
     final Button button = new Button(getApplicationContext()); 
     button.setText("Test"); 
     final Button button2 = new Button(getApplicationContext()); 
     button2.setText("Test2"); 
     final Button button3 = new Button(getApplicationContext()); 
     button3.setText("Test3"); 
     layout.addView(button); 
     layout.addView(button2); 
     layout.addView(button3); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getIndex(layout, button); 
      } 
     }); 
// Other code 

而且在方法getIndex,这里是代码:

private int getIndex(LinearLayout view, View childView) { 
    Log.d("ViewIndex", "View index is" + view.indexOfChild(childView)); 
    return view.indexOfChild(childView); 
} 
1

您可以通过使用imageView.setTag(位置)命令设置ImageView的位置,并得到它,长按为位置=(整数)imageView.getTag()。