Android - 方法没有被重复执行

时间:2015-01-05 20:54:21

标签: android timer position oncreate timertask

我根据其他Image的位置创建了一个更改ImageView位置的方法。

    public void move(double zx, double zy) {

    RelativeLayout.LayoutParams params =
            new RelativeLayout.LayoutParams(80,80);

    // the imageView s was initialized in the onCreate()


    System.out.println("working");


    if (zx < s.getLeft()) {
        if (s.getLeft() - zx > 0) {
            params.leftMargin = s.getLeft() -1;
        } else
            params.leftMargin = s.getLeft() +1;
    }
    if (zx > s.getLeft()) {
        if (s.getLeft() - zx > 0) {
            params.leftMargin = s.getLeft() -1;
        } else
            params.leftMargin = s.getLeft() +1;
    }
    if (zy > s.getTop()) {
        if (s.getTop() - zy > 0) {
            params.topMargin = s.getTop() -1;
        } else
            params.topMargin = s.getTop() + 1;
    }
    if (zy < (int)s.getY()) {
        if ((int)s.getY() - zy > 0) {
            params.topMargin = s.getTop() -1;
        } else
            params.topMargin = s.getTop() + 1;
    }

    s.setLayoutParams(params);
}

然后我打电话给onCreate()

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fase);

    s = (ImageView)findViewById(R.id.s);
    box = (ImageView)findViewById(R.id.box);

    move(box.getLeft(),box.getTop());

    }

消息&#34;工作&#34;被打印,但只有一次。 imageview的位置也没有改变。我的结论是该方法没有重复执行。否则,imageView的位置每次都会改变,并且消息&#34; working&#34;每个瞬间都会出现。我该如何解决?我应该在其他课程中调用该方法吗?我试图在timertask中调用它并在每个mmisecond执行timertask,但是应用程序刚刚停止。

拖动另一个ImageView的命令(在oncreate中):

        box.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            LayoutParams layoutParams = (LayoutParams) box.getLayoutParams();

            switch(event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_MOVE:
                    System.out.println(box.getLeft());
                    int x_cord = (int)event.getRawX();
                    int y_cord = (int)event.getRawY();

                    if(x_cord>windowwidth){x_cord=windowwidth;}
                    if(y_cord>windowheight){y_cord=windowheight;}

                    layoutParams.leftMargin = x_cord - 250; 
                    layoutParams.topMargin = y_cord - 300; 

                    box.setLayoutParams(layoutParams);
                    break;
                default:
                    break;
            }
            return true;
        }
    });

1 个答案:

答案 0 :(得分:0)

首先,在调用move时,您从未告诉您的程序多次执行您的方法onCreate。第二个timertask each milisecond ..我认为这将是每秒执行move 1000次的方式......第三次使用timertask会导致很多问题,您可以使用handler相反,例如。

看看这个,它会告诉你如何实现handler for repeating Tasks