Android:WindowManager.UpdateViewLayout()不工作
我使用系统警报在顶部显示相机预览。我正试着让它拖拉。最初我是在左上角画的。但当拖动它时,它只会出现在屏幕中央,然后就不动了。 以下是我如何添加相对布局:Android:WindowManager.UpdateViewLayout()不工作,android,ontouchlistener,android-windowmanager,Android,Ontouchlistener,Android Windowmanager,我使用系统警报在顶部显示相机预览。我正试着让它拖拉。最初我是在左上角画的。但当拖动它时,它只会出现在屏幕中央,然后就不动了。 以下是我如何添加相对布局: RelativeLayout.LayoutParams sf_lp = new RelativeLayout.LayoutParams(xlen,ylen); relativeLayout.addView(surfaceView,sf_lp); WindowManager.LayoutParams wLayoutParams =
RelativeLayout.LayoutParams sf_lp = new RelativeLayout.LayoutParams(xlen,ylen);
relativeLayout.addView(surfaceView,sf_lp);
WindowManager.LayoutParams wLayoutParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,0,0,WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT);
wLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
windowManager.addView(relativeLayout,wLayoutParams);
以下是OnTouch的代码:
public boolean onTouch(View v, MotionEvent event) {
int X = (int) event.getRawX();
int Y = (int) event.getRawY();
int xpos = relativeLayout.getLeft();
int ypos = relativeLayout.getTop();
if(X >= xpos && X <= xpos+relativeLayout.getWidth() && Y >= ypos && Y <= ypos+relativeLayout.getHeight())
{
Toast.makeText(this,"X="+X+", "+"Y="+Y+"-Touched inside",Toast.LENGTH_SHORT).show();
switch(event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN :
WindowManager.LayoutParams wlp = (WindowManager.LayoutParams) v.getLayoutParams();
dx = X - wlp.x;
dy = Y - wlp.y;
Log.v("onTouch", "Action Down:X=" + X + ", Y=" + Y + " ,dx=" + dx + " ,dy=" + dy);
break;
case MotionEvent.ACTION_UP : Log.v("onTouch","Action Up:X="+X+", Y="+Y+" ,dx="+dx+" ,dy="+dy);
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE :
//windowManager.removeView(v);
Log.v("ACTION_MOVE","X="+ (X-dx) +"Y="+ (Y-dy));
//((TextView) v.findViewWithTag("tv")).setText("X="+ (X-dx) +"Y="+ (Y-dy));
WindowManager.LayoutParams wlp1 = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT);
wlp1.x = X-dx;
wlp1.y = Y-dy;
windowManager.updateViewLayout(v,wlp1);
//windowManager.addView(v,wlp1);
//v.animate().x(X-dx).y(Y-dy).setDuration(0).start();
Log.v("onTouch", "Action Move:X=" + X + ", Y=" + Y + " ,dx=" + dx + " ,dy=" + dy);
break;
}
}
else
{
Toast.makeText(this,"X="+X+", "+"Y="+Y+"-Touched Outside",Toast.LENGTH_SHORT).show();
}
return false;
}
public boolean onTouch(视图v,运动事件){
int X=(int)event.getRawX();
int Y=(int)event.getRawY();
int xpos=relativeLayout.getLeft();
int ypos=relativeLayout.getTop();
if(X>=xpos&&X=ypos&&Y最终我找到了导致它的原因。问题在于“if”条件,我试图确定用户是否接触了视图内部或外部。拖动后,它没有更新相对布局的位置
int xpos = relativeLayout.getLeft();
int ypos = relativeLayout.getTop();
if(X >= xpos && X <= xpos+relativeLayout.getWidth() && Y >= ypos && Y <= ypos+relativeLayout.getHeight())
{
}
intxpos=relativeLayout.getLeft();
int ypos=relativeLayout.getTop();
if(X>=xpos&&X=ypos&&Y最终我找到了导致它的原因。问题在于“if”条件,我试图确定用户是否接触了视图内部或外部。拖动后,它没有更新相对布局的位置
int xpos = relativeLayout.getLeft();
int ypos = relativeLayout.getTop();
if(X >= xpos && X <= xpos+relativeLayout.getWidth() && Y >= ypos && Y <= ypos+relativeLayout.getHeight())
{
}
intxpos=relativeLayout.getLeft();
int ypos=relativeLayout.getTop();
如果(X>=xpos&&X=ypos&&Y制作WindowManager.LayoutParams wlp1=wLayoutParams;并将其置于X上方的onTouch下。我会尝试让您知道。@k0sh我尝试过,但移动非常少,然后停止。没有主意why@k0sh还有一个更新..用你的技巧,我每次尝试都可以拖更长的时间。知道为什么吗?制作WindowManager.laioutParams wlp1=WLAYOUTPRAMS;并将其置于X上方的onTouch下。我会尝试让您知道。@k0sh我尝试过,但移动非常少,然后停止。没有想法why@k0sh还有一个更新…用你的技巧,我每次尝试都可以拖更长的时间。知道为什么吗?