我正在尝试创建一个屏幕,我可以在其中从 SDCard 中选择多个图像并将它们加载到ViewPager和Gridlayout中,就像在WhatsApp 发送多个图像中的方式一样(如下面的屏幕截图所示)。
我可以通过使用 ViewPager 和 GridLayout(用于下面的图像选择视图)来实现屏幕截图中的效果。当用户滑动 ViewPager 时,我需要更改 GridLayout 中的选择器。这个SelectionChange部分也是通过使用RelativeLayout作为GridLayout的Child并更新RelativeLayout的Background来实现的。下面 ade 那些 xmls
gridlayout_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/on_select"
android:padding="2dp" >
<ImageView
android:id="@+id/imageone"
android:layout_width="65dip"
android:layout_height="65dip"
android:layout_gravity="center_vertical"
android:background="@drawable/on_select"
android:padding="1dip"
android:scaleType="center" />
</RelativeLayout>
activity_multi_seletion.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/imagepreviewouterlayout" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
</RelativeLayout>
<RelativeLayout
android:id="@+id/imagepreviewouterlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom_layout"
android:layout_marginBottom="10dip"
android:layout_marginTop="10dip"
android:background="@android:color/transparent"
android:padding="5dp" >
<GridLayout
android:id="@+id/imagepreviewlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="5"
android:horizontalSpacing="10dip"
android:orientation="horizontal"
android:rowCount="1"
android:stretchMode="columnWidth"
android:verticalSpacing="10dip" >
<RelativeLayout
android:id="@+id/layoutContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/on_select"
android:padding="2dp" >
<ImageView
android:id="@+id/imageone"
android:layout_width="65dip"
android:layout_height="65dip"
android:layout_gravity="center_vertical"
android:background="@drawable/on_select"
android:padding="1dip"
android:scaleType="center" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/add"
android:layout_width="65dip"
android:layout_height="65dip"
android:background="@drawable/extrabtn_style"
android:layout_gravity="center" >
<Button
android:id="@+id/button1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/addaccountimg" />
<RelativeLayout
android:id="@+id/addmoreimageBtn"
android:layout_width="406dp"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:clickable="true" >
</RelativeLayout>
</RelativeLayout>
</GridLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/bottom_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/tabbar1" >
<LinearLayout
android:id="@+id/bottom_layout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:weightSum="1" >
<Button
android:id="@+id/cancelBtn"
android:layout_width="178dip"
android:layout_height="50dp"
android:layout_weight="0.5"
android:background="@drawable/imageselector_btn"
android:text="Cancel"
android:textColor="#E9E9E9" />
<Button
android:id="@+id/sendImageBtn"
android:layout_width="178dip"
android:layout_height="50dp"
android:layout_marginLeft="0.5dp"
android:layout_weight="0.5"
android:background="@drawable/imageselector_btn"
android:text="Send"
android:textColor="#E9E9E9" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
on_select.xml(选择可绘制)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/box" android:state_selected="true"></item>
<item android:drawable="@drawable/box" android:state_checked="true"></item>
<item android:drawable="@drawable/box" android:state_focused="true"></item>
</selector>
但是我在更改ViewPager 的 PageChange(onPageSelected)上 relativeLayout 的背景时遇到了性能问题。我的意思是 ViewPager 页面被击中了一段时间并且正在移动。
如果我在 ViewPager 的 PageChange(onPageSelected) 上评论更新 gridlayout 项目的背景,它的移动平滑。下面是代码片段。
@Override
public void onPageSelected(final int arg0) {
if (griditemView!= null)
griditemView.setSelected(false);
griditemView = imagepreviewgridlayout.getChildAt(arg0);
if(griditemView!=null)
{
griditemView.setSelected(true);
}
}
请帮我解决这个问题。