切换到横向时,图库项目会偏离中心

时间:2011-01-14 22:49:56

标签: android

嘿,伙计们,谢谢你的时间。

我正在为Android 2.2编写一个应用程序,我正在使用一个图库来传播图像列表,然后用户可以单击该图像来浏览应用程序的其他部分。在纵向方向上,一切都是犹太的:图像正确显示(完全在我想要的屏幕中心);然而,在横向方向上,画廊中的所有图像奇怪地移动到屏幕中心左侧的固定距离。我几个小时以来一直在研究这个问题,但还没有找到解决方案。我希望一些Android大师可以帮助我解决这个奇怪的渲染问题。

MainMenuActivity.java相关代码段(图库所在的活动)

Gallery optionList = (Gallery)findViewById(R.id.mainMenuOptionList);
GalleryItem[] optionListItemIdArray = new GalleryItem[] { 
        new GalleryItem(R.drawable.icon_main_menu_option_list_blackboard, "Start Next Lesson",
                        "Start the next planned vocab lesson."),
        new GalleryItem(R.drawable.icon_main_menu_option_list_index_cards, "Review Words", 
                        "Manually look over old words."),
        new GalleryItem(R.drawable.icon_main_menu_option_list_dice, "Play Vocab Games",
                        "Play games to reinforce knowledge."),
        new GalleryItem(R.drawable.icon_main_menu_option_list_calendar, "View Lesson Plan", 
                        "View the schedule for coming lessons."),
        new GalleryItem(R.drawable.icon_main_menu_option_list_pie_chart, "View Performance Report",
                        "Evaluate your overall performance statistics."),
        new GalleryItem(R.drawable.icon_main_menu_option_list_settings, "Manage Settings", 
                        "Change and modify application settings.") 
    };
optionList.setAdapter(new GalleryImageAdapter(this, optionListItemIdArray));

注意:GalleryItem是一个带有图像资源ID,标题和描述的POJO。

GalleryImageAdapter.java:

public class GalleryImageAdapter extends BaseAdapter {
private Context context;
private GalleryItem[] galleryItemArray;

public GalleryImageAdapter(Context context, GalleryItem[] galleryItemArray) {
    this.context = context;
    this.galleryItemArray = galleryItemArray;
}

@Override
public int getCount() {
    return galleryItemArray.length;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView = new ImageView(context);
    imageView.setImageResource(galleryItemArray[position].getImageId());
    imageView.setScaleType(ImageView.ScaleType.FIT_START);
    imageView.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.WRAP_CONTENT, Gallery.LayoutParams.WRAP_CONTENT));

    return imageView;
}
}

main_menu.xml的纵向版本

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainMenuLinearLayout"
android:background="#3067a8"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
    android:id="@+id/mainMenuHeadingTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="10dip"
    android:textColor="#ffffff"
    android:textSize="50sp"
    android:text="@string/main_menu_heading"
    android:shadowColor="#555555"
    android:shadowDx="0"
    android:shadowDy="0"
    android:shadowRadius="2"
   />
<TextView
    android:id="@+id/mainMenuSubHeadingTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="15dip"
    android:textColor="#ffffff"
    android:textSize="15sp"
    android:text="@string/main_menu_sub_heading"
    android:shadowColor="#555555"
    android:shadowDx="0"
    android:shadowDy="0"
    android:shadowRadius="2"
   />
<Gallery 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainMenuOptionList"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingTop="20dip"
    android:paddingBottom="10dip"
    android:spacing="40dip"
/>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainMenuOptionListDetailLinearLayout"
    android:gravity="center_vertical|center_horizontal"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/mainMenuOptionListLabelTextView"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="#ffffff"
        android:textSize="25sp"
        android:shadowColor="#555555"
        android:shadowDx="0"
        android:shadowDy="0"
        android:shadowRadius="2"
    />
    <TextView
        android:id="@+id/mainMenuOptionListDescriptionTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:textSize="15sp"
        android:shadowColor="#555555"
        android:shadowDx="0"
        android:shadowDy="0"
        android:shadowRadius="2"
    />
</LinearLayout>
</LinearLayout>

main_menu.xml的横向版本

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainMenuLinearLayout"
android:background="#3067a8"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
    android:id="@+id/mainMenuHeadingTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="10dip"
    android:textColor="#ffffff"
    android:textSize="50sp"
    android:text="@string/main_menu_heading"
    android:shadowColor="#555555"
    android:shadowDx="0"
    android:shadowDy="0"
    android:shadowRadius="2"
   />
<TextView
    android:id="@+id/mainMenuSubHeadingTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="15dip"
    android:textColor="#ffffff"
    android:textSize="15sp"
    android:text="@string/main_menu_sub_heading"
    android:shadowColor="#555555"
    android:shadowDx="0"
    android:shadowDy="0"
    android:shadowRadius="2"
   />
<Gallery 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainMenuOptionList"
    android:layout_width="fill_parent"
    android:layout_height="128dip"
    android:paddingLeft="0dip"
    android:paddingTop="5dip"
    android:spacing="10dip"
/>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainMenuOptionListDetailLinearLayout"
    android:gravity="center_vertical|center_horizontal"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/mainMenuOptionListLabelTextView"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="#ffffff"
        android:textSize="25sp"
        android:shadowColor="#555555"
        android:shadowDx="0"
        android:shadowDy="0"
        android:shadowRadius="2"
    />
    <TextView
        android:id="@+id/mainMenuOptionListDescriptionTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:textSize="15sp"
        android:shadowColor="#555555"
        android:shadowDx="0"
        android:shadowDy="0"
        android:shadowRadius="2"
    />
</LinearLayout>
</LinearLayout>

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

我发现渲染问题出现在我的GalleryImageAdapter中。问题是我为getView()方法创建的每个单独的图像视图选择了缩放方法。我使用的是ImageView.ScaleType.FIT_START缩放类型,它将图像缩放到缩放视图的左上角。我应该使用ImageView.ScaleType.FIT_CENTER,它在缩放视图中对缩放的图像进行中心化。

抱怨错误引导你的注意力。

- Sandile