2012-09-23 30 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);