我长期以来一直在使用所有宽度和高度wrap_content在relativelayout中拖动图像的代码。执行时,它会显示闪烁的箭头图像,以在相对布局中设置imageview的y位置。你能否告诉我在任意限制内垂直拖动图像的方法。 ?
以下是我的代码:
dragImage.setOnTouchListener(new OnTouchListener(){
//private int _xDelta;
private int _yDelta;
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
final float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//_yDelta = Y - lParams.topMargin;
mOldY2 = y;
break;
case MotionEvent.ACTION_UP:
mViewPager.setPagingEnabled(true);
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
btn4.setBackgroundResource(R.drawable.fbl02);
final float dy = y - mOldY2;
mNewY2 += dy;
mOldY2 = y;
System.out.println(mNewY2);
while(mNewY2 > 224){
mNewY2 -= 224;
}
while(mNewY2 < 157){
mNewY2 += 157;
}
if(mNewY2 < 157 || mNewY2 > 224)
break;
v.setTranslationY((int)mNewY2);
v.invalidate();
float power = (float) ( 51.5/67 -(0.2/67) * mNewY2) ;
System.out.println(power);
Float roundF = new Float( Math.round(power));
midBandStick = roundF;
btn4.setText(String.valueOf(midBandStick) );
//}
//break;
}
return true;
}
答案 0 :(得分:4)
试试这个,看看它是否有帮助
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parent = (ViewGroup) findViewById(R.id.root);
image = (ImageView) findViewById(R.id.image1);
parent.post(new Runnable() {
@Override
public void run() {
originalX = (int) image1.getX();
originalY = (int) image1.getY();
}
});
image.setOnTouchListener(this);
}
public boolean onTouch(View view, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view
.getLayoutParams();
x = X - lParams.leftMargin;
y = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
RelativeLayout.LayoutParams layout = (RelativeLayout.LayoutParams) view
.getLayoutParams();
layout.leftMargin = originalX;
layout.topMargin = originalY;
view.setLayoutParams(layout);
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
.getLayoutParams();
layoutParams.leftMargin = X - x;
layoutParams.topMargin = Y - y;
view.setLayoutParams(layoutParams);
break;
}
parent.invalidate();
return true;
}
这将允许您在布局中拖动图像,当您离开图像时,它将返回到原始位置。