控制控件位置

實現物件移動方法,使用Math.sin去做一個曲線讓物件可以順暢的上下位移。

activity_main.xml - 只要拉出一個Button 即可。

    <Button
        android:id="@+id/button2"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="Button" />
Button btn2;
int values = 1;
boolean isRunning = false;

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

        btn2 = (Button) findViewById(R.id.button2);
        btn2.setOnClickListener(new View.OnClickListener() 
         {
            @Override
            public void onClick(View v) 
            {
                if (isrunning) 
                {
                    isRunning = false;
                    nhandler.removeCallbacks(runnable);
                } else {
                    isRunning = true;
                    nhandler.post(runnable);
                }
            }
        });
    }

    Handler nhandler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() 
        {
            if (values < 190) 
            {
                float fff = (float) (Math.sin((double) values * 0.1) * 50) + btn2.getTop();
                btn2.setY(fff);
                values++;
            } else {
                values = 1;
            }
            nhandler.postDelayed(this, 10);
        }
    };

實現效果

思路

透過HandlerRunnable來達成不斷移動的效果 重點在於 -> Math.sin((double) values * 0.1) * 50 因為sin帶入1,2,3數值會是正數,當數值增加到4,5,6的時候數值會變成負數 所以values * 0.1 是為了讓物體位移的距離更小,達成一個滑順的位移效果 而在後面的* 50 則是為了讓移動幅度增加的一個附加值。


移動的物體

如果可以上下移動,那只要控制X軸,那就能左右移動囉!!

這邊使用的是Tangent,因為Tangent的曲線是平穩->急昇 ( 可以讓物體由慢到快的移動 )

實現的部分,程式碼多加上一點點東西即可。

Handler nhandler = new Handler();
Runnable runnable = new Runnable() {
    @Override
    public void run()
    {
        if (values < 190)
        {
            float fff = (float) (Math.sin((double) values * 0.1) * 50) + btn2.getTop();
            float ttt = (float) (Math.tan((double) values * 0.01) * 50);
            btn2.setY(fff);
            btn2.setX(ttt);
            values++;
        } else {
            values = 1;
        }
        nhandler.postDelayed(this, 10);
    }
};

實現效果 ( Gif有點 lag請見諒 )

results matching ""

    No results matching ""