移动ImageView的触摸事件 [英] Moving imageview with touch event
问题描述
我只想要一个简单的事情 我哈瓦一个ImageView的,我可以用触摸移动
i just want a simple thing I hava a imageview and i can move it with touch
这是我的code,对不起,如果这错误的,因为我只是试试吧
This is my code, im sorry if this wrong because i just try it myself
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO Auto-generated method stub
if(arg1.getAction()==MotionEvent.ACTION_DOWN)
{
status=StartDrag;
}
else if(arg1.getAction()==MotionEvent.ACTION_UP)
{
status=StopDrag;
}
return false;
}
});
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if( status==StartDrag)
{
params.leftMargin = (int)event.getX();
params.topMargin = (int)event.getY();
img.setLayoutParams(params);
}
return super.onTouchEvent(event);
}
u能告诉我正确的方式吗?谢谢:D
Can u show me the right way please? Thanks :D
推荐答案
onTouch
的拖动意见的活动可以完美的 RelativeLayout的儿童意见code>和
的FrameLayout
。
onTouch
events for dragging views works perfect for child views of RelativeLayout
and FrameLayout
.
下面是一个例子:
@Override
public boolean onTouch(View v, MotionEvent event){
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN :
{
x = event.getX();
y = event.getY();
dx = x-myView.getX();
dy = y-myView.getY();
}
break;
case MotionEvent.ACTION_MOVE :
{
myView.setX(event.getX()-dx);
myView.setY(event.getY()-dy);
}
break;
case MotionEvent.ACTION_UP :
{
//your stuff
}
return true;
}
现在是什么 DX
和 DY
确实是,在 ACTION_DOWN
它记录您在其中谈到的观点,并从左右(x)获得差异和顶部(Y)的观点,以维持这些利润中 ACTION_MOVE
。
Now what dx
and dy
does is, on ACTION_DOWN
it records where you have touched on the view, and gets difference from left (x) and top (y) of the view, to maintain those margins during ACTION_MOVE
.
返回触摸事件必须是真
如果你参加了。
Return of touch event has to be true
if you are attending it.
更新:对于API 8
在的情况下API 8日,的getX()
和 getY()以
方法不是给予正确的结果,这样你就可以用的是 getRawX()
和 getRawY()
的方法。
In case of API 8, The getX()
and getY()
methods are not giving correct results, so what you can use is getRawX()
and getRawY()
methods.
例如:
RelativeLayout.LayoutParams parms;
LinearLayout.LayoutParams par;
float dx=0,dy=0,x=0,y=0;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN :
{
parms = (LayoutParams) myView.getLayoutParams();
par = (LinearLayout.LayoutParams) getWindow().findViewById(Window.ID_ANDROID_CONTENT).getLayoutParams();
dx = event.getRawX() - parms.leftMargin;
dy = event.getRawY() - parms.topMargin;
}
break;
case MotionEvent.ACTION_MOVE :
{
x = event.getRawX();
y = event.getRawY();
parms.leftMargin = (int) (x-dx);
parms.topMargin = (int) (y - dy);
myView.setLayoutParams(parms);
}
break;
case MotionEvent.ACTION_UP :
{
}
break;
}
return true;
}
这篇关于移动ImageView的触摸事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!