Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android视图的拖动/动画_Android - Fatal编程技术网

Android视图的拖动/动画

Android视图的拖动/动画,android,Android,我不是一名程序员,但我正在努力学习android开发,并有一个爆炸 最近我遇到了岔路口,我不知道我能确定的任何方向都能满足我所有的需要。这是您(专家)可以提供帮助的地方;) 端点:我想让用户触摸一个球,并将它拖到屏幕上的任何位置。我还想动画这个球时,它得到了提请,当它得到下降 我可以使用一个自定义类来完成拖动部分(它不扩展任何内容…就像本教程中的一个类:),但是,我不知道如何将tween动画应用于它,因为它不是一个视图 我还开发了一个动画版本的ImageView,其中包含我的图像,但是,如果不使

我不是一名程序员,但我正在努力学习android开发,并有一个爆炸

最近我遇到了岔路口,我不知道我能确定的任何方向都能满足我所有的需要。这是您(专家)可以提供帮助的地方;)

端点:我想让用户触摸一个球,并将它拖到屏幕上的任何位置。我还想动画这个球时,它得到了提请,当它得到下降

我可以使用一个自定义类来完成拖动部分(它不扩展任何内容…就像本教程中的一个类:),但是,我不知道如何将tween动画应用于它,因为它不是一个视图

我还开发了一个动画版本的ImageView,其中包含我的图像,但是,如果不使用AbsoluteLayout,我无法应用相同的拖放功能,我知道这是不允许的

那么…如何使用MotionEvents在???布局周围移动ImageView,或者如何(使用XML中定义的tweens)为非基于视图的自定义类设置动画

如果这不清楚,请提问。我不知道所有的术语以及你们大多数人可能知道的


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()方法。我将在我的答案中发布一个例子。让它工作(除了区域部分…)。现在,它们会产生动画,我可以拖动它们。太感谢你了!