设备旋转后 ImageView 变小
ImageView is small after rotation of device
设备旋转后 -> 图像 (id=list_image2
) 仍然很小,就像在移动模式下一样
似乎是因为我更改了列数 gridView.setNumColumns(3);,但 viewholder 仍然包含具有先前宽度和高度的先前图像视图,我也尝试制作 gridView.invalidate();在 onConfigurationChanged 中...但没有结果
已添加到清单中的 activity
android:configChanges="keyboardHidden|orientation|screenSize"
这里是item_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_row_root"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="1dip"
android:paddingRight="1dip"
<ImageView
android:id="@+id/list_image2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:minWidth="@dimen/grid_item_width"
android:minHeight="@dimen/grid_item_height"
android:src="@drawable/ic_action_cloud"
android:scaleType="fitXY"
/>
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:layout_alignBottom="@+id/list_image2"
android:layout_alignTop="@+id/list_image2"
android:layout_centerHorizontal="true" />
<RelativeLayout
android:id="@+id/likes_RelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/field_likes"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_alignBottom="@+id/list_image2"
android:layout_alignRight="@+id/list_image2"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp" >
<TextView
android:id="@+id/likes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="@android:color/white"
android:text="265465" />
<ImageView
android:id="@+id/btn_favoutites"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/likes"
android:src="@drawable/btn_rating_star_on_normal_holo_dark"
android:text="Button" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/btn_RelativeLayout"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/likes_RelativeLayout"
android:layout_alignLeft="@+id/likes_RelativeLayout"
android:layout_alignRight="@+id/likes_RelativeLayout"
android:layout_alignTop="@+id/likes_RelativeLayout"
android:background="@drawable/field_like_clickable_style" >
</RelativeLayout>
这是我的适配器:
publ
ic class LazyAdapter2 extends BaseAdapter{
public LazyAdapter2(Context context, ArrayList<WallImage> d) {
mContext = context;
data=d;
inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.resetViewBeforeLoading(true)
.imageScaleType(ImageScaleType.EXACTLY)// default
.build();
}
public View getView( int position, View convertView, ViewGroup parent) {
final ViewHolderItem viewHolder;
if(convertView==null)
{
convertView = inflater.inflate(R.layout.item_grid, null);
viewHolder = new ViewHolderItem();
viewHolder.thumb_image=(ImageView)convertView.findViewById(R.id.list_image2); // thumb image
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolderItem) convertView.getTag();
}
WallImage imageObject = data.get(position);
viewHolder.likes.setText(imageObject.views);
imageLoader.displayImage(imageObject.preview, viewHolder.thumb_image, options);
return convertView;
}
}
不仅使无效,而且用 Handler.post() 这样怎么样?:
new Handler(getMainLooper()).post(new Runnable() {
@Override
public void run() {
gridView.invalidate();
}
});
这可能是因为在您的 getView
方法中使用了 convertView
?
它保留原始布局,并且在方向更改时不会重新创建它。
您可以向 ViewHolderItem class
添加一个指示屏幕方向的布尔值成员。
并且当您回收视图时,您测试了您的 viewHolder
方向。如果与当前屏幕方向不同,请勿回收。
通过更改 item_grid.xml
解决
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_row_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="1dip"
android:paddingRight="1dip"
>
<ImageView
android:id="@+id/list_image2"
android:layout_width="match_parent"
android:layout_height="@dimen/grid_item_height"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:scaleType="centerCrop"
android:src="@android:color/transparent"
/>
完成 ImageView 后 android:layout_height="@dimen/grid_item_height"
=> 旋转屏幕后图像大小保持不变,但要在 ImageView 中调整图像大小我使用 android:scaleType="centerCrop"
图像略微剪切后,但问题已解决
尝试imageScaleType(ImageScaleType.IN_SAMPLE_INT)
和
imageLoader.displayImage(imageObject.preview, viewHolder.thumb_image, options);
viewHolder.thumb_image.setScaleType(ImageView.ScaleType.FILL_XY);
设备旋转后 -> 图像 (id=list_image2
) 仍然很小,就像在移动模式下一样
似乎是因为我更改了列数 gridView.setNumColumns(3);,但 viewholder 仍然包含具有先前宽度和高度的先前图像视图,我也尝试制作 gridView.invalidate();在 onConfigurationChanged 中...但没有结果
已添加到清单中的 activity
android:configChanges="keyboardHidden|orientation|screenSize"
这里是item_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_row_root"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="1dip"
android:paddingRight="1dip"
<ImageView
android:id="@+id/list_image2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:minWidth="@dimen/grid_item_width"
android:minHeight="@dimen/grid_item_height"
android:src="@drawable/ic_action_cloud"
android:scaleType="fitXY"
/>
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:layout_alignBottom="@+id/list_image2"
android:layout_alignTop="@+id/list_image2"
android:layout_centerHorizontal="true" />
<RelativeLayout
android:id="@+id/likes_RelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/field_likes"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_alignBottom="@+id/list_image2"
android:layout_alignRight="@+id/list_image2"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp" >
<TextView
android:id="@+id/likes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="@android:color/white"
android:text="265465" />
<ImageView
android:id="@+id/btn_favoutites"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/likes"
android:src="@drawable/btn_rating_star_on_normal_holo_dark"
android:text="Button" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/btn_RelativeLayout"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/likes_RelativeLayout"
android:layout_alignLeft="@+id/likes_RelativeLayout"
android:layout_alignRight="@+id/likes_RelativeLayout"
android:layout_alignTop="@+id/likes_RelativeLayout"
android:background="@drawable/field_like_clickable_style" >
</RelativeLayout>
这是我的适配器:
publ
ic class LazyAdapter2 extends BaseAdapter{
public LazyAdapter2(Context context, ArrayList<WallImage> d) {
mContext = context;
data=d;
inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.resetViewBeforeLoading(true)
.imageScaleType(ImageScaleType.EXACTLY)// default
.build();
}
public View getView( int position, View convertView, ViewGroup parent) {
final ViewHolderItem viewHolder;
if(convertView==null)
{
convertView = inflater.inflate(R.layout.item_grid, null);
viewHolder = new ViewHolderItem();
viewHolder.thumb_image=(ImageView)convertView.findViewById(R.id.list_image2); // thumb image
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolderItem) convertView.getTag();
}
WallImage imageObject = data.get(position);
viewHolder.likes.setText(imageObject.views);
imageLoader.displayImage(imageObject.preview, viewHolder.thumb_image, options);
return convertView;
}
}
不仅使无效,而且用 Handler.post() 这样怎么样?:
new Handler(getMainLooper()).post(new Runnable() {
@Override
public void run() {
gridView.invalidate();
}
});
这可能是因为在您的 getView
方法中使用了 convertView
?
它保留原始布局,并且在方向更改时不会重新创建它。
您可以向 ViewHolderItem class
添加一个指示屏幕方向的布尔值成员。
并且当您回收视图时,您测试了您的 viewHolder
方向。如果与当前屏幕方向不同,请勿回收。
通过更改 item_grid.xml
解决<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_row_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="1dip"
android:paddingRight="1dip"
>
<ImageView
android:id="@+id/list_image2"
android:layout_width="match_parent"
android:layout_height="@dimen/grid_item_height"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:scaleType="centerCrop"
android:src="@android:color/transparent"
/>
完成 ImageView 后 android:layout_height="@dimen/grid_item_height"
=> 旋转屏幕后图像大小保持不变,但要在 ImageView 中调整图像大小我使用 android:scaleType="centerCrop"
图像略微剪切后,但问题已解决
尝试imageScaleType(ImageScaleType.IN_SAMPLE_INT)
和
imageLoader.displayImage(imageObject.preview, viewHolder.thumb_image, options);
viewHolder.thumb_image.setScaleType(ImageView.ScaleType.FILL_XY);