我对Java和android studio还是很陌生,这是我的第一个项目,因此对此的任何帮助都将大有帮助。我们正在尝试构建一个可以在小部件中显示ceratin实时数据的应用程序,现在仅用于试用,我们正在使用随机数生成器进行调试,它可以正常工作,但问题是我们必须关闭该应用程序并再次返回查看已使用的小部件中的任何更改。为此,我已在存储库之后使用了任何图表:here
当前,我们尝试部署可以在here中找到的温度计图表。
我尝试使用计时器,但这没有帮助
MainActivity.java
看起来像这样:
package com.anychart.sample.charts;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.anychart.AnyChart;
import com.anychart.AnyChartView;
import com.anychart.chart.common.dataentry.SingleValueDataSet;
import com.anychart.charts.LinearGauge;
import com.anychart.enums.Anchor;
import com.anychart.enums.Orientation;
import com.anychart.enums.Position;
import com.anychart.sample.R;
import com.anychart.scales.Base;
import com.anychart.scales.Linear;
public class ThermometerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chart_common);
AnyChartView anyChartView = findViewById(R.id.any_chart_view);
anyChartView.setProgressBar(findViewById(R.id.progress_bar));
LinearGauge linearGauge = AnyChart.linear();
// TODO data
int random = (int)(Math.random() * 50 + 1);
linearGauge.data(new SingleValueDataSet(new Integer[] { random }));
linearGauge.tooltip()
.useHtml(true)
.format(
"function () {\n" +
" return this.value + '°' + 'C' +\n" +
" ' (' + (this.value * 1.8 + 32).toFixed(1) +\n" +
" '°' + 'F' + ')'\n" +
" }");
linearGauge.label(0).useHtml(true);
linearGauge.label(0)
.text("C°")
.position(Position.LEFT_BOTTOM)
.anchor(Anchor.LEFT_BOTTOM)
.offsetY("20px")
.offsetX("38%")
.fontColor("black")
.fontSize(17);
linearGauge.label(1)
.useHtml(true)
.text("F°")
.position(Position.RIGHT_BOTTOM)
.anchor(Anchor.RIGHT_BOTTOM)
.offsetY("20px")
.offsetX("47.5%")
.fontColor("black")
.fontSize(17);
Base scale = linearGauge.scale()
.minimum(-30)
.maximum(40);
// .setTicks
linearGauge.axis(0).scale(scale);
linearGauge.axis(0)
.offset("-1%")
.width("0.5%");
linearGauge.axis(0).labels()
.format("{%Value}°")
.useHtml(true);
linearGauge.thermometer(0)
.name("Thermometer")
.id(1);
linearGauge.axis(0).minorTicks(true);
linearGauge.axis(0).labels()
.format(
"function () {\n" +
" return '<span style=\"color:black;\">' + this.value + '°</span>'\n" +
" }")
.useHtml(true);
linearGauge.axis(1).minorTicks(true);
linearGauge.axis(1).labels()
.format(
"function () {\n" +
" return '<span style=\"color:black;\">' + this.value + '°</span>'\n" +
" }")
.useHtml(true);
linearGauge.axis(1)
.offset("3.5%")
.orientation(Orientation.RIGHT);
Linear linear = Linear.instantiate();
linear.minimum(-20)
.maximum(100);
// .setTicks
linearGauge.axis(1).scale(linear);
anyChartView.setChart(linearGauge);
}
}
我希望温度计随着生成的每个数字而变化,但是只有在我关闭应用程序并再次进入时,温度计才会更改值
答案 0 :(得分:0)
您提到需要关闭应用程序以更新温度计。这是因为onCreate
每次打开应用程序都会被调用。
Timer
应该可以工作。也许您使用的Timer错误。这应该定期更新您的温度计。
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() { // you should only update UI in the main/ui thread
@Override
public void run() {
// do your updating here
}
});
}
}, 16, 16); // 60 fps