2015-12-21 113 views
1

我试图做一个HorizontalListView(by DevSmart),其中第一项(列)将有Ndp宽度和所有下一个项目将有N/2dp宽度。在我的示例N = 300中。所以我为标准的Android ListView完美地完成了它,并且它非常棒。但是,按照与Horizo​​ntalListView完全相同的逻辑,我面临着误解。Horizo​​ntalListView缩放内容(项目布局)

所有项目的宽度和高度与Horizo​​ntalListView相同。它 doesen't什么宽度/高度我指定在photo.xml。 而作为一个结果我得到的物品宽和高大的整个屏幕(因为我com.example.yura.listviewscale.HorizontalListViewmatch_parent宽度和高度)

有人可以帮助我吗?

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.yura.listviewscale.MainActivity" > 

<com.example.yura.listviewscale.HorizontalListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/myHzListView" /> 

</LinearLayout> 

photo.xml:

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

    <ImageView 
     android:layout_width="match_parnet" 
     android:layout_height="match_parent" 
     android:id="@+id/photoView" /> 
</RelativeLayout> 

适配器类的存根:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder; 

     if (convertView == null) { 
      convertView = LayoutInflater.from(mContext).inflate(R.layout.photo, parent, false); 

      viewHolder = new ViewHolder(); 
      viewHolder.photoImageView = (ImageView) convertView.findViewById(R.id.photoView); 

      mInitialWidth = convertView.getLayoutParams().height; 

      convertView.setTag(viewHolder); 
     } else 
      viewHolder = (ViewHolder)convertView.getTag(); 

     Photo photo = mPhotoList.get(position); 

     if (position != 0) { 
      RelativeLayout.LayoutParams params = convertView.getLayoutParams(); 
      params.width = (int) (mInitialWidth * 0.5f); 
     } 

     viewHolder.photoImageView.setBackgroundDrawable(photo.getDrawable()); 

     return convertView; 
    } 

    static final class ViewHolder { 
     ImageView photoImageView; 
    } 

回答

1

所以使用带自定义LayoutManager的RecyclerView来放置它。在onLayoutChildren方法中执行所有魔术。特别是测量所有视图和布局。