Android ImageView动态宽度和高度

时间:2013-04-03 07:47:09

标签: android android-layout android-imageview

我有一个从网址加载的水平图片列表。所以我有一个ImageLoader,然后是一个Adapter然后我的Activity。我的xml布局如下所示:

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所示。灰色虚线是imageView,我们实际上看不到它,只有那些图像(绿色框)。我想要实现的是图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所示?

编辑:

这就是我的适配器的样子:

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;
}

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

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

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