Android视图的拖动/动画
我不是一名程序员,但我正在努力学习android开发,并有一个爆炸 最近我遇到了岔路口,我不知道我能确定的任何方向都能满足我所有的需要。这是您(专家)可以提供帮助的地方;) 端点:我想让用户触摸一个球,并将它拖到屏幕上的任何位置。我还想动画这个球时,它得到了提请,当它得到下降 我可以使用一个自定义类来完成拖动部分(它不扩展任何内容…就像本教程中的一个类:),但是,我不知道如何将tween动画应用于它,因为它不是一个视图 我还开发了一个动画版本的ImageView,其中包含我的图像,但是,如果不使用AbsoluteLayout,我无法应用相同的拖放功能,我知道这是不允许的 那么…如何使用MotionEvents在???布局周围移动ImageView,或者如何(使用XML中定义的tweens)为非基于视图的自定义类设置动画 如果这不清楚,请提问。我不知道所有的术语以及你们大多数人可能知道的Android视图的拖动/动画,android,Android,我不是一名程序员,但我正在努力学习android开发,并有一个爆炸 最近我遇到了岔路口,我不知道我能确定的任何方向都能满足我所有的需要。这是您(专家)可以提供帮助的地方;) 端点:我想让用户触摸一个球,并将它拖到屏幕上的任何位置。我还想动画这个球时,它得到了提请,当它得到下降 我可以使用一个自定义类来完成拖动部分(它不扩展任何内容…就像本教程中的一个类:),但是,我不知道如何将tween动画应用于它,因为它不是一个视图 我还开发了一个动画版本的ImageView,其中包含我的图像,但是,如果不使
anddev.org论坛上也有很多关于这个问题的帖子,所以我会用我在那里得到的任何回复来更新这篇帖子。为什么你不能扩展视图?那么,你可以完全控制它的绘制方式,因为你可以覆盖OnDraw()方法。只需使ColorBall类扩展视图。移动时更改其位置,然后仅使该视图无效,并让它自己绘制,而不是让DrawView类绘制 编辑-下面是一个示例类
public class Card extends View
{
private Bitmap mImage;
private final Paint mPaint = new Paint();
private final Point mSize = new Point();
private final Point mStartPosition = new Point();
public Card(Context context)
{
super(context);
}
public final Bitmap getImage() { return mCardImage; }
public final void setImage(Bitmap image)
{
mImage = image;
setSize(mCardImage.getWidth(), mCardImage.getHeight());
}
@Override
protected void onDraw(Canvas canvas)
{
Point position = getPosition();
canvas.drawBitmap(mCardImage, position.x, position.y, mPaint);
}
public final void setPosition(final Point position)
{
mRegion.set(position.x, position.y, position.x + mSize.x, position.y + mSize.y);
}
public final Point getPosition()
{
Rect bounds = mRegion.getBounds();
return new Point(bounds.left, bounds.top);
}
public final void setSize(int width, int height)
{
mSize.x = width;
mSize.y = height;
Rect bounds = mRegion.getBounds();
mRegion.set(bounds.left, bounds.top, bounds.left + width, bounds.top + height);
}
public final Point getSize() { return mSize; }
@Override
public boolean onTouchEvent(MotionEvent event)
{
// Is the event inside of this view?
if(!mRegion.contains((int)event.getX(), (int)event.getY()))
{
return super.onTouchEvent(event);
}
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
mStartPosition.x = (int)event.getX();
mStartPosition.y = (int)event.getY();
bringToFront();
onSelected();
return true;
}
else if(event.getAction() == MotionEvent.ACTION_MOVE)
{
int x = 0, y = 0;
if(mLock == DirectionLock.FREE || mLock == DirectionLock.HORIZONTAL_ONLY)
{
x = (int)event.getX() - mStartPosition.x;
}
if(mLock == DirectionLock.FREE || mLock == DirectionLock.VERTICAL_ONLY)
{
y = (int)event.getY() - mStartPosition.y;
}
mRegion.translate(x, y);
mStartPosition.x = (int)event.getX();
mStartPosition.y = (int)event.getY();
invalidate();
return true;
}
else
{
return super.onTouchEvent(event);
}
}
}
首先,感谢您的回复。我相信这就是解决方案。我只是不知道如何移动视图(ImageView似乎是扩展的合理位置)使用拖动命令而不引入AbsoluteLayout容器,该容器为我提供X,Y定位。到目前为止,我所能想到的最好方法是在(X,Y)处的自定义容器视图画布上绘制类。我不知道有任何接受(X,Y)的布局容器(AbsoluteLayout除外)这样。在我的应用程序中,我需要其中的4个视图,它们都可以在屏幕上拖动。我要再给它一次机会。brb;)我已经转换了我的“通用”类,以便它现在扩展视图。将它们添加到(X,Y)并在布局中移动(X1,Y1)的技巧是否与重写onLayout()然后调用invalidate()有关?否,重写onDraw()方法。我将在我的答案中发布一个例子。让它工作(除了区域部分…)。现在,它们会产生动画,我可以拖动它们。太感谢你了!