2013-10-08 111 views
0

我需要在Android中创建一个视图,涉及将可变数量的图像放置在屏幕上的特定位置。我的问题是,这个位置不应该根据屏幕的大小而变化。另外,它的位置必须相对于背景图像。 例如,我有一个房子的形象,我必须通过一些固定的坐标来安排窗户和门。 建议?在屏幕上的特定位置imageView

+0

请参阅我对此问题的回答http://stackoverflow.com/questions/16729169/how-to-maintain-multi-layers-of-imageviews-and-keep-their-aspect-ratio-based-on – pskink

+0

正是我所期待的,但我需要能够点击添加到主图层的每个元素。 – user1169390

+0

看到注释掉石灰 – pskink

回答

1

除了对如何检测MotionEvents,将以下方法添加到LayeredImageView您的评论:

public List<Layer> getLayersAt(float x, float y) { 
    Iterator<Layer> iter = mLayers.iterator(); 
    List<Layer> list = new LinkedList<Layer>(); 
    RectF rect = new RectF(); 
    Matrix m = getImageMatrix(); 

    while (iter.hasNext()) { 
     Layer layer = iter.next(); 
     rect.set(layer.drawable.getBounds()); 
     layer.matrix.mapRect(rect); 
     m.mapRect(rect); 
     if (rect.contains(x, y)) { 
      list.add(layer); 
     } 
    } 
    return list; 
} 

你可以这样称呼它:

public boolean onTouch(View v, MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 
    List<Layer> list = iv.getLayersAt(x, y); 
} 
0

您可以对您的LinearLayout使用android:weightSum属性,然后根据权重数字将LinearLayout上的视图与android:layout_weight分开。我在这里有一个例子:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="70" 
    android:gravity="bottom|center_horizontal" 
    android:orientation="horizontal" 
    android:weightSum="100" > 

    <ImageView 
     android:id="@+id/ivHamsa" 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="50" 
     android:scaleType="fitCenter" 
     android:src="@drawable/hamsa_icon" /> 
</LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="5" 
    android:orientation="horizontal" > 
</LinearLayout> 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="20" 
    android:gravity="top|center_horizontal" 
    android:orientation="horizontal" 
    android:weightSum="100" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="70" 
     android:gravity="top|center_horizontal" 
     android:orientation="horizontal" 
     android:weightSum="100" > 

     <ImageView 
      android:id="@+id/ivAndroid" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="20" 
      android:scaleType="fitCenter" 
      android:background="@drawable/rounded_white" 
      android:layout_margin="5dp" 
      android:src="@drawable/android_icon" /> 

     <ImageView 
      android:id="@+id/ivBook" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="20" 
      android:scaleType="fitCenter" 
      android:background="@drawable/rounded_white" 
      android:layout_margin="5dp" 
      android:src="@drawable/book_icon" /> 

     <ImageView 
      android:id="@+id/ivMusic" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="20" 
      android:scaleType="fitCenter" 
      android:background="@drawable/rounded_white" 
      android:layout_margin="5dp" 
      android:src="@drawable/music_icon" /> 

     <ImageView 
      android:id="@+id/ivVideo" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="20" 
      android:scaleType="fitCenter" 
      android:background="@drawable/rounded_white" 
      android:layout_margin="5dp" 
      android:src="@drawable/video_icon" /> 

     <ImageView 
      android:id="@+id/ivPhoto" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="20" 
      android:scaleType="fitCenter" 
      android:background="@drawable/rounded_white" 
      android:layout_margin="5dp" 
      android:src="@drawable/photo_icon" /> 
    </LinearLayout> 

</LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="5" 
    android:orientation="horizontal" > 
</LinearLayout>