2013-04-03 5 views
1

У меня есть горизонтальный список изображений, загружаемых с URL-адреса. Итак, у меня есть ImageLoader, затем адаптер, а затем моя активность. Мои макеты XML выглядит следующим образом:Динамическая ширина и высота изображения Android ImageView

mainlayout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <com.devsmart.android.ui.HorizontalListView 
     android:id="@+id/hlist_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:overScrollMode="always" > 
    </com.devsmart.android.ui.HorizontalListView> 

</LinearLayout> 

Тогда мой list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:translationY="200dp" > <!-- make this dynamic --> 

    <FrameLayout 
     android:id="@+id/mainlayout" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" > 

     <ImageView 
     android:id="@+id/prof_pic"  
     android:clickable="true" 
     android:adjustViewBounds="true" 
     android:layout_width="360dp" 
     android:layout_height="360dp" /> 

    <ProgressBar 
     android:id="@+id/img_progress" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
     </FrameLayout>  

    <TextView 
     android:id="@+id/sname" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/sdesc" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

При такой схеме результат Рисунок A. Серое сломаны line - это изображение, мы не можем видеть его, а только те изображения (зеленый квадрат). То, что я хочу, чтобы достичь является один на рисунке B.

enter image description here

Таким образом, чтобы решить эту проблему, несколько я попытался добавить в мой ImageView

    <ImageView 
       android:id="@+id/prof_pic"  
       android:clickable="true" 
       android:adjustViewBounds="true" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:maxWidth="360dp" 
       android:maxHeight="360dp" 
       android:minHeight="240dp" 
       android:minWidth="240dp" 
       /> 

Но что произошло то, что, к тому времени я откройте приложение, мой список изображений выглядит так, как показано на рисунке A. Но когда прокрутка по изображениям, она немного изменилась, как на рисунке B. Но когда я прокручиваю назад к первому изображению, только первые изображения будут отображаться только или иногда мой список изображений начинается с моего второго изображения. Это действительно сумасшествие.

Есть ли способ, которым я могу достичь Рисунок B, не разрушая мой список изображений или в начале приложения, он уже отображается, как на рисунке B?

EDIT:

Это как мой адаптер выглядит следующим образом:

public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolder holder = null; 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 



    if(convertView == null){ 
     convertView = inflater.inflate(R.layout.list_layout, null); 
     holder = new ViewHolder(); 
     holder.txtShopName = (TextView) convertView.findViewById(R.id.shop_name); 
     holder.txtDesc = (TextView) convertView.findViewById(R.id.desc); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.prof_pic); 
     holder.progBar = (ProgressBar) convertView.findViewById(R.id.img_progress); 


     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 



    imageLoader=new ImageLoader(context.getApplicationContext(), holder.progBar); 

    SRowItem sItem = (SRowItem) getItem(position); 

    holder.txtName.setText(sItem.getShopName()); 
    holder.txtDesc.setText(sItem.getShopDesc()); 
    imageLoader.DisplayImage(sItem.getImageUrl(), holder.imageView); 

    return convertView; 
} 
+0

Я просто ответил на ваш другой вопрос, так что я видел этот связанный с Это. Самая важная часть информации, которую я вижу в этом вопросе, - это то, как выглядит метод getView вашего адаптера, и каков этот элемент управления, который вы используете (com.devsmart.android.ui.HorizontalListView). Похоже, что каждый элемент списка является оберткой вокруг изображения, а элемент списка специально измеряется, чтобы занимать такое же пространство. – Rich

+0

Я отредактировал мой вопрос и включил getView моего адаптера. [com.devsmart.android.ui.HorizontalListView] (https://github.com/mtparet/HorizontalListView/blob/master/HorizontalListView.java) – elL

ответ

2

Попробуйте что-то вроде этого:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height); 

ImageView imageView = (ImageView) LayoutInflater.from(context).inflate(R.layout.image, null); 
imageView.setLayoutParams(params); 
+0

Итак, это будет помещено в мой адаптер? – elL

+0

это правильно. – lokoko