Alv*_*ian 8 layout android touch imageview
我只想要一个简单的事情.我有一个imageview,我可以用触摸移动它
这是我的代码,我很抱歉,如果这是错的,因为我只是自己尝试过
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);
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我正确的方法吗?
Apu*_*iri 20
onTouch用于拖动视图的事件非常适合于子视图RelativeLayout和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;
}
Run Code Online (Sandbox Code Playgroud)
现在什么dx和dy做的是,在ACTION_DOWN它记录在您对视图感动,并得到该视图的左(x)的差异和顶部(Y),期间维持这些利润ACTION_MOVE.
true如果您正在参加,则必须返回触摸事件.
更新:对于API 8
在API 8的情况下,The getX()和getY()方法没有给出正确的结果,因此您可以使用的是getRawX()和getRawY()方法.
示例:
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;
}
Run Code Online (Sandbox Code Playgroud)
Hir*_*tel 20
我这样做了:
private float xCoOrdinate, yCoOrdinate;
Run Code Online (Sandbox Code Playgroud)
onCreate():
ImageView imageView = (ImageView)findViewById(R.id.imageView);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
xCoOrdinate = view.getX() - event.getRawX();
yCoOrdinate = view.getY() - event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
view.animate().x(event.getRawX() + xCoOrdinate).y(event.getRawY() + yCoOrdinate).setDuration(0).start();
break;
default:
return false;
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
完成