我希望imageview
仅在屏幕尺寸范围内可拖动。但是下面代码的问题是,只有左边和上边距会停止imageview
,如何实现右边距和下边距的if语句,以便它阻止视图离开焦点。以下是代码,提前致谢
public boolean onTouch(View view, MotionEvent event) {
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
float screenHeight = displaymetrics.heightPixels;
float screenWidth = displaymetrics.widthPixels;
final int x = (int) event.getRawX();
final int y = (int) event.getRawY();
if(view==image1){
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams)
view.getLayoutParams();
xDelta = x - lParams.leftMargin;
yDelta = y - lParams.topMargin;
x1Delta = lParams.rightMargin;
y2Delta = lParams.bottomMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view
.getLayoutParams();
//below leftMargin , topMargin works fine
if((x - xDelta) > 0 && (x - xDelta) < screenWidth ){layoutParams.leftMargin = x - xDelta;}
if((y - yDelta) > 0 && (y - yDelta) < screenHeight){layoutParams.topMargin = y - yDelta;}
layoutParams.rightMargin = 0;//how to make this stops the imageview on rightMargin
layoutParams.bottomMargin = 0;//how to make this stops the imageview on bottomMargin
view.setLayoutParams(layoutParams);
break;
}
mainLayout.invalidate();
}
return true;
}
};
答案 0 :(得分:1)
经过长时间的研究后,我自己找到了答案,并将LinearLayout
更改为AbsoluteLayout
..
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
xDelta = event.getX();
yDelta = event.getY();
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
mode = ZOOM;
}
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
x1Delta = event.getX() - xDelta ;
y2Delta = event.getY() - yDelta;
m_posX = m_prevX + x1Delta;
m_posY = m_prevY + y2Delta;
if (m_posX > 0 && m_posY > 0 && (m_posX + view.getWidth()) < mainLayout.getWidth() && (m_posY + view.getHeight()) < mainLayout.getHeight())
{
view.setLayoutParams(new AbsoluteLayout.LayoutParams(view.getMeasuredWidth(), view.getMeasuredHeight(), (int) m_posX, (int) m_posY));
m_prevX = m_posX;
m_prevY = m_posY;
}
break;
}
mainLayout.invalidate();
return true;
}
};