gpt4 book ai didi

java - Android:如何制作 ImageView 网格,并在将另一个图像拖到其上方时使图像发生变化?

转载 作者:行者123 更新时间:2023-12-01 13:18:05 25 4
gpt4 key购买 nike

我正在尝试制作一个 ImageView 网格,当我将另一个 View 拖到它们上面时(该 View 本质上充当鼠标指针),它会将我在网格中拖动的图像更改为不同的图像。当我将“鼠标” View 拖走时,它会恢复正常。

现在,我的鼠标光标 View 正在移动,并且使用自定义适配器通过 GridView 实现了 ImageView 网格(如下图所示)

image grid

我可以拖动光标,但是当我尝试在 gridview 内拖动时,它会调用 gridview 的 ontouch 监听器上的图像(仅当我单击 ImageView 时,而不是当我滑过它时)。我似乎也无法对 ImageView 中的图像进行 onHover 处理。

此外,如果鼠标 View 覆盖了网格图像之一,则不会调用 ImageView 的 ontouchlistener 网格。

实现此目的的最佳方法是什么( View 类型等)?

这是我迄今为止所拥有的一些相关代码。

这是我在 Activity 中设置 GridView 的位置

GridView gridView;
gridView = (GridView) findViewById(R.id.gridView);



gridView.setAdapter(new ImageAdapter(this,new String [25]));
gridView.setOnDragListener(new MyDragListener());
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {


}
});
gridView.setClickable(false);

这是我的适配器中的getView函数

public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View gridView;

if (convertView == null) {

gridView = inflater.inflate(R.layout.vibe_pad_section, null);


final ImageView imageView = (ImageView) gridView
.findViewById(R.id.grid_item_image);


imageView.setImageResource(R.drawable.vibepadcircle);
imageView.setPadding(10,10,10,10);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e) {
Log.e("here","here");
switch (e.getAction()) {
case MotionEvent.ACTION_MOVE:
Log.e("here2","here2");

}
imageView.setImageResource(R.drawable.bar_high);
return true;
}
});

VibePad.padTargets.add(imageView);

} else {
gridView = (View) convertView;
}

return gridView;
}

class MyDragListener implements View.OnDragListener {

@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
ClipData dragData;
View p = (View) v.getParent();
Object index = p.getTag();
final int which = Integer.parseInt(index.toString());
boolean handled = true;
Log.e(" in on drag","in on drag") ;

switch (action) {


case DragEvent.ACTION_DRAG_EXITED:

// Report the drop/no-drop result to the user
((ImageView) v).setImageResource(R.drawable.bar_high);
break;

case DragEvent.ACTION_DRAG_ENTERED:
// just drop it
((ImageView) v).setImageResource(R.drawable.vibepadcircle);
break;

default :
break;
}
return handled;

}

最佳答案

您需要创建一个扩展 OnDragListener 的类:当 ACTION_DRAG_ENTERED 发生时,您可以将底层图像更改为其他图像。当您存在时(您已将 View 拖动到 GridView 上图像的边界框之外),则可以将其更改回原始图像

class  MyDragListener implements OnDragListener {

@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
ClipData dragData;
View p = (View) v.getParent();
Object index = p.getTag();
final int which = Integer.parseInt(index.toString());
boolean handled = true;


switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
dragSku = event.getClipDescription().getLabel().toString();
break;

case DragEvent.ACTION_DRAG_ENDED:

// Report the drop/no-drop result to the user
final boolean dropped = event.getResult();
compareInMotion = false;
BaseAdapter lva = (BaseAdapter) gridview.getAdapter();
lva.notifyDataSetChanged();
break;

case DragEvent.ACTION_DROP:
// just drop it
((ImageView) v).setImageBitmap(emptyImg);
setUpCompareItem((ImageView) v, dragSku); break;

default :
break;
}
return handled;

关于java - Android:如何制作 ImageView 网格,并在将另一个图像拖到其上方时使图像发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22305585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com