您可以通过在网格项目顶部放置一个弹出窗口来做到这一点。
为了找到网格项目在屏幕上的确切位置,您可以使用以下代码
Rect loc = new Rect();
int[] location = new int[2];
view.getLocationOnScreen(location);
loc.left = location[0];
loc.top = location[1];
loc.right = loc.left + view.getWidth();
loc.bottom = loc.top + view.getHeight();
变量loc 保存被点击的view 在屏幕上的确切位置,这只是方法的第二个参数
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
}
有了这些信息,您可以轻松实现所需。最好是计算视图的中心,并将弹出窗口的中心与单击视图的中心对齐。
注意:如果部分视图可见,您将需要调整显示弹出窗口。
已编辑:
由于我没有收到您的问题,因此我添加了一张图片以提高清晰度。
我已经提供了案例 1 的代码。对于案例 2,您需要修改布局,您可以在单击网格项目时显示叠加图像
已编辑:实施案例 2
修改了适配器代码,移动了一些变量以进行优化
public CustomAdapter(Activity activity, ...){
inflator = activity.getLayoutInflater();
...
}
LayoutInflater inflator;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder view;
if (convertView == null) {
view = new ViewHolder();
convertView = inflator.inflate(R.layout.tile_row, null);
view.textView = (TextView) convertView.findViewById(R.id.title);
view.imageView = (ImageView) convertView.findViewById(R.id.icons);
view.clickedImage = (ImageView) convertView.findViewById(R.id.clickedImage);
convertView.setTag(view);
} else {
view = (ViewHolder) convertView.getTag();
}
// set image view parameters
view.textView.setText(adapterNames.get(position));
view.imageView.setImageResource(adapterIcondIds.get(position));
//add a int variable to the view holder
view.position = position;
if(position != clickedPosition){
view.clickedImage.setVisibility(View.GONE);
}
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder holder = (ViewHolder)v.getTag();
clickedPosition = holder.position;
holder.clickedImage.setVisibility(View.VISIBLE);
//you can also set the resource of the imageview here.
notifyDataSetChanged();
}
});
return convertView;
}
//this is used for resetting the previous view when a new view is clicked
int clickedPosition = -1;
为了在网格视图中保留项目的单击状态,我将
单击网格的项目位置。现在在 onClick 我改变可见性
单击的图像(处于 GONE 状态),更新变量
clickedPosition 并简单地调用 notifyDataSetChanged。这说明
数据集已更改的适配器和所有的 getView
可见的网格项目将被调用。因此,如果您最初单击项目 1,
然后点击 item 3 然后你会注意到 item 1 已经被重置
单击第 3 项时。
XMLtitle_row.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/droid_logo_black"
android:visibility="gone" />
<ImageView
android:id="@+id/clickedImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/login_help_logo" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Title"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>