2012-09-23 27 views
14

我想要一个简单的规范视图,我将定义起始值和结束值,并有一个指针来显示给定的变量值。简单的衡量视图像在android的速度计?

enter image description here

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

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

回答

22

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

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

非常感谢业主Evelina Vrabie!


enter image description here

但是它不在XHDPI/Android设备的几个版本工作(以上4)。问题是规格视图中的文本。

+0

非常感谢您节省我的时间..! –

+0

那些视图仍然有效?我在使用它时遇到以下错误:java.lang.NullPointerException at android.content.res.BridgeResources.getString(BridgeResources.java:501) at android.content.Context.getString(Context.java:334) at org .codeandmagic.android.gauge.GaugeView.readAttrs(GaugeView.java:224) at org.codeandmagic.android.gauge.GaugeView。 (GaugeView。java:170) at org.codeandmagic.android.gauge.GaugeView。 (GaugeView.java:175) at ......... –

+0

对我来说完美无缺! – oikonomopo

13

对于任何正在寻找简单量规视图的人,我制作了一个库,您可以克隆并根据需要使用/修改。

CustomGauge

enter image description here

+0

不错的库,但我只需要180度我怎么接近那个 –

+1

我用过你的库,但它在所有'gauge:***'属性中显示错误。我添加了'xmlns:gauge =“http://schemas.android.com/apk/res-auto”'但仍然出现错误。 @pkleczko你能说出了什么问题吗? –

+0

这是GPL授权,这是不可能的。 – lschuetze

11

你推荐所有其它仪表有错误和不运行的奇巧和棒棒糖罚款。此处也没有Android Studio和Gradle友好的库。

下面是最近多了一个更新的棒棒糖你可以用摇篮使用git回购:

enter image description here

后,您在您的项目库中添加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" 
/> 

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

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

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

+0

嘿@sulejman这个库的minSdk版本设置为21,这对我的应用程序来说有点太高了,所以当我用minSdk版本9将它导入到我的应用程序时,我可以在构建时收到合并错误,可以设置minSdk到更低版本还是提出解决方法? – user3677331

+0

你可以自己设置它,但我不确定它是否会实际上使用9级,它认为它从13开始工作,但是只设置为21.从git下载库并玩弄:) –

+0

can我们将负值应用于此GaugeView。我尝试过,但没有成功 –

2

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

  1. 在我们的项目为look this link创建一个资源文件夹,你会看到如何创建一个资产文件夹,如果有人不知道。
  2. 接下来是你有一个关于如何页面sholud的样子,例如标题,规则等的设计一个HTML页面,并将其放置在文件夹资产中。
  3. 有很多网站提供的规格如This is one site,或者你可以浏览其他网站,并采取任何你觉得很酷......! 将其全部包含.js文件并将其放置在资源文件夹中。
  4. Android提供了一个类来处理webiview称为“WebViewClient”你可以浏览更多的了解在互联网更多关于它
  5. 这是查看视图内容示例代码..

    网页=(的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); 
    } 
} 

此web视图类

  1. 您也可以从活动数据发送到HTML页面.. Refer This link

通过所有敬请阅读,更正欢迎.. !!

+0

迂回的方法,但仍然有效。尽管如此,在Android开发中,自定义视图始终执行,并且看起来比web视图中的HTML/JS更好 – mix3d

+0

那么,我是初学者,时间更少......感谢@ mix3d能够详细说明您的答案 – 2017-02-24 05:51:12

1

我前一阵子做了这个。随意克隆和修改。 (这需要从旧Vintage Thermometer一些想法。)

github.com/Pygmalion69/Gauge

enter image description here

它可以很容易地添加到您的摇篮项目:

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" /> 

她e是以编程方式设置数值的示例:

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