简单的衡量视图像在android的速度计?

我想要一个简单的规范视图,我将定义开始值和结束值,并有一个指针来显示给定的variables值。

在这里输入图像说明

所以我可以显示一个给定的值,如速度计。 例如,如果我的textView的值是1300,那么在textview旁边我想要这个自定义米视图animation就像这样!

有可能的? 任何现有的示例代码?

Solutions Collecting From Web of "简单的衡量视图像在android的速度计?"

另一个我在Evelina Vrabie's blog ,使用它,工作完美!

看看Evelina Vrabie's GitHub 。 它有一个量表库和一些与之交互的样本。

非常感谢店主Evelina Vrabie!


在这里输入图像说明

然而,它不适用于XHDPI /几个Android设备版本(4以上)。 问题是规格视图中的文本。

对于任何寻求简单量表视图的人来说,我制作了一个库,可以克隆和使用/修改您的需求。

CustomGauge

在这里输入图像说明

你推荐的所有其他仪表都有bug,在Kitkat和棒棒糖上运行得不好。 此外,这里没有Android Studio和gradle友好的库。

这里是最新的更新为棒棒糖,你可以使用Gradle的git回购:

在这里输入图像说明

在您的项目中包含库之后,将gaugelibrary添加到您的活动的xml布局中:

 <io.sule.gaugelibrary.GaugeView android:id="@+id/gauge_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" gauge:showOuterShadow="false" gauge:showOuterRim="false" gauge:showInnerRim="false" gauge:needleWidth="0.010" gauge:needleHeight="0.40" gauge:scaleStartValue="0" gauge:scaleEndValue="100" /> 

这将显示无针的静态测量仪。 要用随机animation实例化针,您需要在活动类文件中执行此操作。 看看它是如何完成的:

 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() {} }; } 

这将实例化针,使其animation移动到随机值。

我不知道迟到的答案是否会有所帮助。 我也遇到了同样的情况,我想用量表来显示数据,因为量表没有作为android的小部件,作为一个喜欢上图的图书馆,可以通过互联网上的各种链接find,尽pipe它是非常有帮助的(感谢美妙的作者..)我发现自己很难想象在某些情况下,所以另一个解决scheme,我所做的是我的应用程序是我整合的JavaScript量表到我的Android应用程序。 你可以通过以下步骤来做到这一点

  1. 在我们的项目中创build一个资产文件夹, 看看这个链接 ,如果有人不知道这个链接 ,你会看到如何创build一个资产文件夹。
  2. 下一个是你有一个devise一个HTML页面如何你的页面sholud看起来像eg头,没有规范等,并把它放在文件夹资产。
  3. 有许多网站提供这样的规则这是一个网站,或者你可以浏览其他网站,采取任何你觉得很酷…! 把它全部包括.js文件,并把它放在资产文件夹。
  4. Android提供了一个处理web视图的类叫做“WebViewClient”,你可以浏览更多关于它的知识
  5. 这是查看webview内容的示例代码

    web =(WebView)findViewById(R.id.webview01); progressBar =(ProgressBar)findViewById(R.id.progressBar1);

     web.setWebViewClient(new myWebClient()); web.getSettings().setJavaScriptEnabled(true); web.post(new Runnable() { @Override public void run() { web.loadUrl("file:///android_asset/fonts/guage.html"); } }); 

以上为加载html&javscript。

  public class myWebClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // TODO Auto-generated method stub super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub progressBar.setVisibility(View.VISIBLE); view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); progressBar.setVisibility(View.GONE); } } 

这个webview类

  1. 您也可以将活动的数据发送到html页面。 请参阅此链接

请通读所有,更正欢迎..

我刚才做了这个。 随意克隆和修改。 (这需要从旧的复古温度计的一些想法。)

github.com/Pygmalion69/Gauge

在这里输入图像说明

它可以很容易地添加到你的Gradle项目中:

 repositories { maven { url 'https://www.jitpack.io' } } dependencies { compile 'com.github.Pygmalion69:Gauge:1.1' } 

视图以XML格式声明:

 <de.nitri.gauge.Gauge android:id="@+id/gauge1" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_gravity="center" android:layout_marginTop="10dp" android:layout_weight="0.75" gauge:labelTextSize="42" gauge:maxValue="1000" gauge:minValue="0" gauge:totalNicks="120" gauge:valuePerNick="10" gauge:upperText="Qty" gauge:lowerText="@string/per_minute" /> 

以下是以编程方式设置值的示例:

  final Gauge gauge1 = (Gauge) findViewById(R.id.gauge1); final Gauge gauge2 = (Gauge) findViewById(R.id.gauge2); final Gauge gauge3 = (Gauge) findViewById(R.id.gauge3); final Gauge gauge4 = (Gauge) findViewById(R.id.gauge4); gauge1.moveToValue(800); HandlerThread thread = new HandlerThread("GaugeDemoThread"); thread.start(); Handler handler = new Handler(thread.getLooper()); handler.postDelayed(new Runnable() { @Override public void run() { gauge1.moveToValue(300); } }, 2800); handler.postDelayed(new Runnable() { @Override public void run() { gauge1.moveToValue(550); } }, 5600); HandlerThread gauge3Thread = new HandlerThread("Gauge3DemoThread"); gauge3Thread.start(); Handler gauge3Handler = new Handler(gauge3Thread.getLooper()); gauge3Handler.post(new Runnable() { @Override public void run() { for (float x = 0; x <= 6; x += .1) { float value = (float) Math.atan(x) * 20; gauge3.moveToValue(value); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }); gauge4.setValue(333);