我不是程序员,但我正在尝试学习android开发,并且有一个爆炸.
最近我在路上遇到了一个叉子,我不知道我能识别的任何方向都能满足我的所有需求.这是您(专家)可以提供帮助的地方;)
端点:我想让用户触摸一个球,并将其拖动到屏幕上的任何位置.我还希望在它被绘制时以及当它被丢弃时为该球制作动画.
我可以使用自定义类完成拖动部分(不扩展任何东西......只是在本教程中找到的类:基本的拖放,但是,我不知道如何将补间动画应用到它因为它不是一个观点.
我还开发了一个ImageView的动画版本,其中包含我的图像,但是,如果不使用AbsoluteLayout,我无法应用相同的拖放功能,我知道这是禁止使用的.
那么......我该如何移动一个ImageView?使用MotionEvents进行布局,或者如何使用基于非视图的自定义类动画(使用XML中定义的补间)?
如果不清楚,请提问.我不知道你们大多数人的所有术语.
在anddev.org论坛上还有一个这个问题的副本,所以我会在这篇文章中更新我对那里的任何回复.
Cas*_*eyB 23
为什么不能扩展View?然后,您可以完全控制它的绘制方式,因为您可以覆盖OnDraw()方法.只需使ColorBall类扩展View.移动时更改其位置,然后使该视图无效并使其自行绘制而不是让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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28670 次 |
| 最近记录: |