0

Android プロジェクトを作成したい。別のレイアウトでスムーズに移動したいレイアウトがあります。これを行うためにスレッドを使用しようとしました。しかし、私のコードの結果では、レイアウトは最終位置にジャンプし、オフセットから目的地までスムーズに移動しません。

    abs1 = (AbsoluteLayout) findViewById(R.id.absoluteLayout2);
    ImageButton ib1 = (ImageButton) findViewById(R.id.imageButton1);
    ib1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Runnable r = new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                        try {
                            display(100);
                            display(100);
                            display(100);
                            display(100);
                            display(100);
                            display(100);
                            display(100);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                }

                private void display(int i) throws InterruptedException {
                    AbsoluteLayout.LayoutParams param = (AbsoluteLayout.LayoutParams) abs1
                            .getLayoutParams();
                    param.x = param.x + 10;
                    // param.y=param.x+20;
                    abs1.setLayoutParams(param);


                    if (Thread.interrupted()) {
                        throw (new InterruptedException());
                    }
                        Thread.sleep(i);


                }
            };
                r.run();

メインファイル:

    <AbsoluteLayout
        android:id="@+id/absoluteLayout2"
        android:layout_width="107dp"
        android:layout_height="308dp"
        android:layout_x="10dp"
        android:layout_y="12dp"
        android:background="@color/red" >

        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_x="0dp"
            android:layout_y="0dp"
            android:background="@null"
            android:src="@drawable/calendar" />
4

2 に答える 2

1

編集:これはAPI 11以降で利用可能です

そのためにを使用するだけObjectAnimatorです:

ObjectAnimator moveToSide = ObjectAnimator.ofFloat(myView, "translationX", 0f, 400f);
moveToSide.setDuration(700);
moveToSide.start();

さまざまな float 値で試してみてください。ここで、元の位置から X 軸に沿って 400f まで開始します。

その後、この位置にとどまります。AnimatorListener最初または最後に何かをしたい場合は、 を追加することもできます。

moveToSide.addListener(new AnimatorListener() {
@Override
        public void onAnimationStart(Animator animation) {
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
        }

        @Override
        public void onAnimationEnd(Animator animation) {
        }

        @Override
        public void onAnimationCancel(Animator arg0) {
        }
    });
于 2013-09-03T07:11:15.157 に答える