Все другие калибры, которые вы рекомендовали, имеют ошибки и не работают нормально на Kitkat и Lollipop. Кроме того, здесь нет Android Studio и удобной библиотеки.
Вот git repo для более поздней версии, обновленной для Lollipop, которую вы можете использовать с Gradle:
[/g1]
После того, как вы включите библиотеку в свой проект, добавьте gaugelibrary в xml-макет вашей активности:
Это покажет статическую калибровку без иглы. Чтобы создать иглу со случайной анимацией, вам нужно сделать это в файле класса активности. Посмотрите, как это делается здесь:
package io.sule.testapplication;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Menu;
import android.view.MenuItem;
import java.util.Random;
import io.sule.gaugelibrary.GaugeView;
public class MainActivity extends Activity {
private GaugeView mGaugeView;
private final Random RAND = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGaugeView = (GaugeView) findViewById(R.id.gauge_view);
mTimer.start();
}
private final CountDownTimer mTimer = new CountDownTimer(30000, 1000) {
@Override
public void onTick(final long millisUntilFinished) {
mGaugeView.setTargetValue(RAND.nextInt(101));
}
@Override
public void onFinish() {}
};
}
Это создаст экземпляр иглы и сделает ее анимацией, перемещаясь к случайным значениям.
Функции GDScript не являются объектами, как в Python. Таким образом, вы не можете напрямую ссылаться на функцию.
Тем не менее, вы можете косвенно ссылаться на них по имени, используя их связанный экземпляр.
Например, со следующей функцией:
func hello():
print('Hello')
Вы можете вызывать функцию для экземпляра по имени:
call('hello') # prints 'Hello'
Вы можете сохранить экземпляр и имя с помощью funcref()
: [1112 ]
var ref = funcref(hello_object_instance, 'hello')
ref.call_func() # prints 'Hello'
takes_func_ref_to_call_later(ref) # later, prints 'Hello'
FuncRef.call_func()
делает то же самое, что и object_instance.call()
, просто оборачивает его в объект.
Из-за этого, как показали Object.connect()
и друзья, общая функция для функций обратного вызова такова:
func deferred_finish(param1, param2, callback_obj, callback_func):
# ... do something
callback_ref = funcref(callback_obj, callback_func)
func _process(delta):
if _finished:
callback_ref.call_func()
func _enter_tree():
deferred_finish('hello', 'world', self, 'finished_callback')
Надеюсь, это поможет. Дайте мне знать, если вам нужны какие-либо разъяснения.