【问题标题】:Simple gauge view like speedmeter in android?像android中的车速表这样的简单仪表视图?
【发布时间】:2012-09-15 02:26:52
【问题描述】:

我想要一个简单的仪表视图,我将在其中定义起始值和结束值,并有一个指针来显示给定的变量值。

所以我可以显示一个给定的值,比如速度计。例如,如果我的 textView 的值为 1300,那么在 textview 旁边我希望有这样的自定义仪表视图动画!

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

【问题讨论】:

    标签: android view android-animation android-custom-view gauge


    【解决方案1】:

    我在Evelina Vrabie's blog 找到的另一个,使用它并且工作完美!

    看看Evelina Vrabie's GitHub。 它有一个量规库和一些可供交互的样本。

    非常感谢所有者 Evelina Vrabie!


    但它不适用于 XHDPI/少数版本的 android 设备(4 以上)。问题是仪表视图中的文本。

    【讨论】:

    • 非常感谢您节省我的时间..!
    • 那些这种观点仍然有效??使用它时出现此错误:在 org.codeandmagic 的 android.content.Context.getString(Context.java:334) 的 android.content.res.BridgeResources.getString(BridgeResources.java:501) 的 java.lang.NullPointerException。 android.gauge.GaugeView.readAttrs(GaugeView.java:224) 在 org.codeandmagic.android.gauge.GaugeView.(GaugeView.java:170) 在 org.codeandmagic.android.gauge.GaugeView.( GaugeView.java:175) 在......
    • 太棒了。你如何定制它?喜欢设置不同的针样式?
    • 没有为 gradle 配置。现在如何在android项目中使用它?
    【解决方案2】:

    对于任何寻找简单仪表视图的人,我制作了一个库,您可以根据需要克隆和使用/修改它。

    CustomGauge

    【讨论】:

    • 不错的图书馆,但我只需要它 180 度我怎么能接近它
    • 我使用了您的库,但在所有 gauge:*** 属性中都显示错误。我添加了xmlns:gauge="http://schemas.android.com/apk/res-auto",但仍然出现错误。 @pkleczko 你能说有什么问题吗?
    • 糟糕的是,它是 GPL 许可的,这对我来说是不可能的。
    • @lschuetze - 请随意将其用于任何目的。为什么 GPL 对你来说还不够?
    • 这真是太棒了!谢谢。我喜欢它,因为它很简单,但看起来仍然不错。
    【解决方案3】:

    您推荐的所有其他仪表都有错误,并且不能在 Kitkat 和 Lollipop 上正常运行。这里也没有 Android Studio 和 gradle 友好的库。

    这里是最近更新的 Lollipop 的 git 存储库,您可以与 Gradle 一起使用:

    在项目中包含库后,将 Gaugelibrary 添加到 Activity 的 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"
     />
    

    这将显示没有针的静态仪表。要使用随机动画实例化针头,您需要在活动类文件中执行此操作。在此处查看它是如何完成的:

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

    这将实例化 needle 并使其动画移动到随机值。

    【讨论】:

    • 嘿@sulejman 这个库的 minSdk 版本设置为 21,这对我的应用程序来说有点太高了,所以当我使用 minSdk 版本 9 将它导入我的应用程序时,我在build,您能否将 minSdk 设置为较低版本或提出解决方法?
    • 你可以自己设置,但我不确定它是否真的适用于 9 级,它认为它从 13 开始工作,但只是设置为 21。从 git 下载库和玩:)
    • 我们可以对这个 GaugeView 应用负值吗?我试过但没有成功
    • @Mehrdad 对不起,我很久没活动了,如果有帮助,我更新了链接。
    • 是否支持负值?
    【解决方案4】:

    我不知道迟到的答案是否会有所帮助。我也遇到了同样的情况,我想使用仪表来可视化数据,因为仪表不是在 android 中作为小部件给出的,作为一个爱好者,我去了上面的库,可以通过互联网上的各种链接找到,尽管它非常有帮助(感谢它的出色作者..)我发现自己很难在某些情况下可视化,所以我为我的应用程序所做的另一个解决方案是将 JavaScript 仪表集成到我的 android 应用程序中。 您可以通过以下步骤做到这一点

    1. 在我们的项目中创建资产文件夹-look this link,如果有人不知道,您将看到如何创建资产文件夹。
    2. 下一个是您设计了一个 html 页面,说明您的页面应该是什么样子,例如标题、参数编号等...并将其放置在文件夹资产中。
    3. 有很多网站提供This is one site 之类的名称,或者您可以浏览其他网站并采取任何您觉得很酷的方式...!! 将包括 .js 文件在内的所有内容放入资产文件夹中。
    4. Android 提供了一个用于处理 webiview 的类,名为 "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 页面..Refer This link

    请仔细阅读,欢迎指正..!!

    【讨论】:

    • 一种迂回的方法,但仍然有效。尽管如此,使用 Android 开发人员,自定义视图的性能和外观总是比 webview 中的 HTML/JS 更好
    • 嗯,我是初学者,时间不多了......谢谢@mix3d,你能详细说明你的答案吗
    【解决方案5】:

    我不久前做了这个。随意克隆和修改。 (它借鉴了旧的Vintage Thermometer 的一些想法。)

    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);
    

    【讨论】:

      【解决方案6】:

      在这个网站上,您会找到一些免费的可定制仪表。

      ScComponents

      非常容易安装并且有据可查。 例如,您可以按照以下说明在 5 分钟内免费获得类似的东西。

      转到上面链接的网站。单击 GR004 并在弹出窗口出现后单击“免费下载”。 该库将下载、解压缩并按照说明在您的 Android 项目中安装该库(aar 文件)。

      在你的 XML 布局中写下这段代码,你的仪表就完成了:

      <com.sccomponents.gauges.gr004.GR004
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
      

      您有许多 XML 选项来自定义它:

      • sccAnimDuration
      • sccEnableTouch
      • scc 倒置
      • sccFontName
      • sccLabelsSizeAdjust
      • sccMajorTicks
      • sccMaxValue
      • sccMinorTicks
      • sccMinValue
      • sccShowContour
      • sccShowLabels
      • sccText
      • scc值

      并通过编码实现相关功能。

      【讨论】:

        【解决方案7】:

        使用这个:Sample Project

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

        repositories {
            maven {
                url 'https://www.jitpack.io'
            }
        }
        
        dependencies {
        implementation 'com.jignesh13.speedometer:speedometer:1.0.0'
        }
        

        视图在 XML 中声明:

            <com.jignesh13.speedometer.SpeedoMeterView
                android:id="@+id/speedometerview"
                android:layout_width="250dp"
                android:layout_height="250dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.453"
                app:layout_constraintStart_toStartOf="parent"
                app:backimage="@android:color/black"
                app:needlecolor="#fff"
                app:removeborder="false"
                app:linecolor="#fff"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.079" />
        

        【讨论】:

        • 这个很酷,但是最高速度和刻度都是硬编码的
        猜你喜欢
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 2015-12-18
        相关资源
        最近更新 更多