gpt4 book ai didi

android - 拖放:ImageView 不会在屏幕上一直移动

转载 作者:行者123 更新时间:2023-11-30 02:30:32 27 4
gpt4 key购买 nike

我有一个服务可以创建一个带有 ImageView 对象的窗口,该对象有一个 onDragListener。这个想法是能够在屏幕上重新定位该窗口。

问题:无论出于何种原因,event.getX() 和 event.getY() 返回的坐标似乎并不反射(reflect)现实。该对象确实移动,但仅在左上角 70-100 像素左右并且非常不稳定。在模拟器和 Galaxy S5 上测试。

 public class PlayerRemote  extends Service 
implements OnClickListener, OnDragListener{


private WindowManager windowManager;
private ImageView remoteButton;
String msg = "Sharp";
private static final String IMAGEVIEW_TAG = "Sharp";
private WindowManager.LayoutParams layoutParams;

public static final String ACTION_SWITCH_VIEW =
"com.example.android.playerremote.action.SWITCH_VIEW";



@Override public IBinder onBind(Intent intent) {

return null;
}

@Override
public void onCreate() {
super.onCreate();


windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();


remoteButton = new ImageView(this);
remoteButton.setImageResource(R.drawable.on_off_inv);
remoteButton.setTag(IMAGEVIEW_TAG);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);

params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = display.getWidth();
params.y = display.getHeight();

windowManager.addView(remoteButton, params);

//------------------------------------------------------
//-SETTING OnLongClickListener--------------------------
/***/
remoteButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {

ClipData.Item item = new ClipData.Item((CharSequence)v.getTag());

String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};

ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item);

// Instantiates the drag shadow builder.
View.DragShadowBuilder myShadow = new DragShadowBuilder(remoteButton);

// Starts the drag
v.startDrag(dragData, // the data to be dragged
myShadow, // the drag shadow builder
null, // no need to use local data
0 // flags (not currently used, set to 0)
);
return true;
}
});

//------------------------------------------------------------------
//-SETTING OnDragListener-------------------------------------------
/***/
remoteButton.setOnDragListener( new OnDragListener(){
//@Override
public boolean onDrag(View v, DragEvent event){
switch(event.getAction())
{
case DragEvent.ACTION_DRAG_STARTED:

layoutParams = (LayoutParams) v.getLayoutParams();

break;

case DragEvent.ACTION_DRAG_ENTERED:


break;

case DragEvent.ACTION_DRAG_EXITED :


break;

case DragEvent.ACTION_DRAG_LOCATION :

Log.d(msg, "Action is DragEvent.ACTION_DRAG_LOCATION");
layoutParams.x = (int) Math.round(event.getX());
layoutParams.y = (int) Math.round(event.getY());
windowManager.updateViewLayout(remoteButton, layoutParams);

break;

case DragEvent.ACTION_DRAG_ENDED :

break;

case DragEvent.ACTION_DROP:

Log.d(msg, "ACTION_DROP event");
layoutParams.x = (int) Math.round(event.getX());
layoutParams.y = (int) Math.round(event.getY());
windowManager.updateViewLayout(remoteButton, layoutParams);
break;

default: break;
}
return true;
}
});

似乎当我改变 View 的重力时,我的拖放操作开始在不同的位置出现错误,并且仍然不允许我在屏幕上移动。感觉我的窗口被封装在另一个我不知道的对象中。

非常感谢任何想法。

最佳答案

通过膨胀布局并向其添加 ImageView 来解决问题,如下所示:

public class Remote extends Service
...
private WindowManager windowManager;
private ImageView remoteButton;
private RelativeLayout remoteButtonLayout;

...
[in onCreate()]
...

remoteButtonLayout = (RelativeLayout) inflater
.inflate(R.layout.remote_button, null);
remoteButton = (ImageView)remoteButtonLayout.findViewById(R.id.on_off_inv);
windowManager.addView(remoteButtonLayout, params);

OnClickListener 然后设置为布局而不是 ImageView 本身。我觉得我错过了它,但不确定您是否需要布局而无需其他 Activity 在其后面运行。哦,好吧,这是我生命中的两天,我再也回不来了,哈哈。

...

关于android - 拖放:ImageView 不会在屏幕上一直移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27396486/

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