缩略图未按预期填充fill_parent

时间:2013-12-03 20:50:09

标签: android xml android-ui android-xml

我正在尝试将我的缩略图(userVideoThumbImageView)扩展到屏幕边缘,但似乎没有这样做。我将宽度设置为fill_parent,所以我不确定它为什么不这样做:

截图:

http://www.flickr.com/photos/110503723@N07/11207214295

list_item_user_video.xml:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:orientation="vertical" >

    <com.blundell.tut.ui.widget.UrlImageView
        android:id="@+id/userVideoThumbImageView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitCenter"
        android:contentDescription="YouTube video thumbnail"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/userVideoTitleTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black"
        android:text="Video Title Not Found" />

</LinearLayout>

activity_main.xml中:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >

    <com.blundell.tut.ui.widget.VideosListView
        android:id="@+id/videosListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:id="@+id/footer"
        android:layout_width="fill_parent"
        android:layout_height="70dip"
        android:layout_alignParentBottom="true" >

        <HorizontalScrollView
            android:id="@+id/groupScrollView"
            android:layout_width="fill_parent"
            android:layout_height="match_parent" >
        </HorizontalScrollView>

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:src="@drawable/scroll_lt_arrow" />

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:src="@drawable/scroll_rt_arrow" />

        <android.support.v4.view.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>

</RelativeLayout>

JAVA:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // If convertView wasn't null it means we have already set it to our list_item_user_video so no need to do it again
    if(convertView == null){
        // This is the layout we are using for each row in our list
        // anything you declare in this layout can then be referenced below
           convertView = mInflater.inflate(R.layout.list_item_user_video, parent, false); resolved the issue! 
    }
    // We are using a custom imageview so that we can load images using urls
    // For further explanation see: http://blog.blundell-apps.com/imageview-with-loading-spinner/
    UrlImageView thumb = (UrlImageView) convertView.findViewById(R.id.userVideoThumbImageView);

    TextView title = (TextView) convertView.findViewById(R.id.userVideoTitleTextView); 
    // Get a single video from our list
    final Video video = videos.get(position);
    // Set the image for the list item
    thumb.setImageDrawable(video.getThumbUrl());
    // Set the title for the list item
    title.setText(video.getTitle());

    return convertView;
}

2 个答案:

答案 0 :(得分:1)

getView方法中,您需要手动将LayoutParams应用于膨胀的视图,或者使用inflate(myResource, parent, false)而不是inflate(myResource, null)来阻止您的xml布局参数被覆盖。在您的情况下,myResourceR.layout.list_item_user_video

然后你可以使用

if (convertView==null)
    convertView = 
        mInflater.inflate(R.layout.list_item_user_video, parent, false);

编辑:

好的,看起来ImageViews无法在XML中自动缩放以适应某个宽度而不会失真:https://stackoverflow.com/a/13925725/506796

因此,您必须在给视图充气后缩放它们。首先,您需要知道图像的宽高比(宽度/高度)。由于您似乎具有恒定的宽高比,因此您可以将其设置为静态最终浮点变量,这将更加容易。

然后您需要知道列表视图的宽度(以像素为单位)。再次,你很幸运,因为你的列表视图填满了屏幕的宽度。 (这更容易,因为测量listview的宽度会很棘手 - 在布局完成第一次传递后你必须这样做。)你可以在适配器构造函数中获得屏幕宽度

screenWidth = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getWidth()

您还可以创建一组布局参数,以应用于所有图像视图。在适配器构造函数中:

LinearLayout.LayoutParams imageParams = new LayoutParams(screenWidth, (int)(screenWidth/aspectRaio));

您可以将这些参数应用于getView中的图像视图。

答案 1 :(得分:1)

我认为图像现在显示为100%。如果要将其拉伸到最大宽度,请将以下行添加到urlImageView xml:

android:scaleType="fitCenter"

CenterInside执行以下操作:均匀缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充) )。

检查documentation以获取有关缩放的更多信息。