控制控件位置
實現物件移動方法,使用
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);
}
};
實現效果
思路
透過Handler
及Runnable
來達成不斷移動的效果
重點在於 -> 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請見諒 )