Android - 移动图像视图

时间:2015-02-14 11:34:47

标签: android layout android-activity

我想使用在xml中创建的布局 在触摸屏幕的位置移动imageView。 四处走动,完全卡住。 怎么了? 是否可以将所有这些代码放入onCreate,或者我应该使用其他方法?

 public class Game2 extends Activity implements OnTouchListener {

    ImageView myBall;
    static TextView textElement;
    static float x, y = 0;
    static float newX, newY;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.field);

        textElement = (TextView) findViewById(R.id.score);
        textElement.setText("Starting");

        myBall = (ImageView) findViewById(R.id.my_ball);

    }

    @Override
    public boolean onTouch(View v, MotionEvent me) {

        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        switch (me.getAction()) {

        case MotionEvent.ACTION_UP:
            newX = me.getX();
            newY = me.getY();
            myBall.setX(newX);
            myBall.setY(newY);
            break;
        }
        myBall.invalidate();
        return true;
    }
}

3 个答案:

答案 0 :(得分:0)

问题在于,在给定的代码中,您只在活动开始时抽出一次球。 onCreate()仅在操作系统中Activitybrought to life时被调用一次。您正在使用invalidate()强制重绘ImageView,因此我相信如果您在invalidate()更新球的位置后再次致电onTouch()方法,你应该得到你之后的行为。

此外,您似乎只是将值分配给newXnewY,而不是球的实际位置。您需要再次致电setX()setY()才能传递这些更新后的值。

答案 1 :(得分:0)

试试这个:

@Override
    public boolean onTouch(View v, MotionEvent me) {

        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        switch (me.getAction()) {

        case MotionEvent.ACTION_UP:
            newX = me.getX();
            newY = me.getY();
            myBall.setX(newX);
            myBall.setY(newY);
            break;
        }
        return true;
    }

答案 2 :(得分:0)

其实我的朋友是对的 但是代码没有用,因为我还没有设置onTouchListenner。

所以我设置了布局ID

android:id="@+id/field_layout"

并添加onCreate:

 LinearLayout myLayout = (LinearLayout) findViewById(R.id.field_layout);
 myLayout.setOnTouchListener(this);

现在一切正常。 非常感谢!