2012-09-23 15 views
14

मैं एक साधारण गेज दृश्य चाहता हूं जहां मैं प्रारंभ मूल्य और अंत मूल्य को परिभाषित कर दूंगा और दिए गए चर मूल्य को दिखाने के लिए एक सूचक होगा।एंड्रॉइड में स्पीडमीटर की तरह सरल गेज दृश्य?

enter image description here

तो मैं Speedmeter की तरह किसी दिए गए मूल्य दिखा सकते हैं। उदाहरण के लिए यदि मेरा टेक्स्टव्यू का मान 1300 है, तो टेक्स्टव्यू के बगल में मैं इस कस्टम मीटर दृश्य एनीमेशन को इस तरह रखना चाहता हूं!

यह संभव है? कोई मौजूदा उदाहरण कोड?

उत्तर

22

एक और जिसे मैंने Evelina Vrabie's blog पर पाया, इसका इस्तेमाल किया और सही काम किया!

Evelina Vrabie's GitHub पर देखें। इसमें एक गेज लाइब्रेरी है और कुछ नमूनों के साथ बातचीत करने के लिए है।

मालिक एवलिना वर्बी के लिए बड़ा धन्यवाद!


enter image description here

हालांकि यह (4 ऊपर) android उपकरणों की XHDPI/कुछ संस्करणों पर काम नहीं कर रहा। समस्या गेज व्यू में पाठ है।

+0

मेरा समय बचाने के लिए बहुत बहुत धन्यवाद ..! –

+0

ये दृश्य अभी भी काम करता है ?? मुझे इसका उपयोग करते समय यह त्रुटि मिलती है: java.lang.NullPointerException atroid.content.res.BridgeResources.getString (BridgeResources.java:5201) atroid.content.Context.getString (Context.java:334) संगठन पर .codeandmagic.android.gauge.GaugeView.readAttrs (गेज व्यू.जावा 2424) org.codeandmagic.android.gauge.GaugeView पर। (गेज व्यू।जावा: 170) org.codeandmagic.android.gauge.GaugeView पर। (GaugeView.java:175) ......... –

+0

पर मेरे लिए पूरी तरह से काम किया !! – oikonomopo

13

सरल गेज दृश्य की तलाश करने वाले किसी भी व्यक्ति के लिए मैंने एक लाइब्रेरी बनाई है जिसे आप क्लोन कर सकते हैं और अपनी आवश्यकताओं के लिए उपयोग/संशोधित कर सकते हैं।

CustomGauge

enter image description here

+0

अच्छी लाइब्रेरी, लेकिन मुझे इसकी केवल 180 डिग्री की आवश्यकता है कि मैं –

+1

पर कैसे पहुंच सकता हूं, मैंने आपकी लाइब्रेरी का उपयोग किया लेकिन यह सभी 'गेज: ***' विशेषताओं में एक त्रुटि दिखा रहा है। मैंने 'xmlns: gauge =" http://schemas.android.com/apk/res-auto "जोड़ा लेकिन अभी भी त्रुटियां प्राप्त कर रही हैं। @pkleczko क्या आप कह सकते हैं कि क्या गलत है? –

+0

खराब यह जीपीएल लाइसेंस प्राप्त है जो मेरे लिए संभव नहीं है। – lschuetze

11

अन्य सभी गेज आप की सिफारिश बग हो और Kitkat और लॉलीपॉप पर ठीक नहीं चलाते। इसके अलावा यहां कोई एंड्रॉइड स्टूडियो नहीं है और यहां अनुकूल लाइब्रेरी है।

enter image description here

आप अपने प्रोजेक्ट में पुस्तकालय शामिल होने के बाद एक्सएमएल को gaugelibrary जोड़ें:

यहाँ लॉलीपॉप के लिए अद्यतन और हाल ही में एक Gradle साथ उपयोग कर सकते हैं के लिए Git रेपो है आपकी गतिविधि का लेआउट:

<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

हे @ सुलेजमैन इस लाइब्रेरी में minSdk संस्करण 21 पर सेट है, जो मेरे एप्लिकेशन के लिए थोड़ा अधिक है इसलिए जब मैं इसे 9 के minSdk संस्करण के साथ अपने एप्लिकेशन में आयात करता हूं तो मुझे बिल्ड के समय विलय त्रुटियां मिलती हैं, क्या आप कृपया सेट कर सकते हैं minSdk एक निम्न संस्करण के लिए या एक काम के आसपास प्रस्ताव? – user3677331

+0

आप इसे अपने आप सेट कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह वास्तव में 9 स्तर के साथ काम करने जा रहा है, ऐसा लगता है कि यह 13 से काम करता है, लेकिन यह 21 पर सेट है। गिट से लाइब्रेरी डाउनलोड करें और चारों ओर खेलें :) –

+0

कर सकते हैं हम इस गेज व्यू को नकारात्मक मान लागू करते हैं। मैंने कोशिश की लेकिन सफलता नहीं –

2

मुझे नहीं पता कि देर से उत्तर मदद करने जा रहा है या नहीं। मैं भी उसी स्थिति में आया जहां मैं डेटा को देखने के लिए गेज का उपयोग करना चाहता हूं, क्योंकि एंड्रॉइड में गेज को विजेट के रूप में नहीं दिया गया है, क्योंकि उत्साही के रूप में मैं उपरोक्त पुस्तकालयों के लिए गया था, जो इंटरनेट में विभिन्न लिंक के माध्यम से मिल सकते हैं, हालांकि यह काफी मददगार था (इसके अद्भुत लेखकों के लिए धन्यवाद ..) मुझे कुछ स्थितियों के दौरान कल्पना करना मुश्किल लगता है, इसलिए मैंने जो किया है उसका एक और समाधान है मेरे ऐप के लिए मैंने अपने एंड्रॉइड एप्लिकेशन में जावास्क्रिप्ट गेज को अभिन्न किया है। आप निम्नलिखित द्वारा कदम है कि

  1. हमारे परियोजना look this link में एक परिसंपत्ति फ़ोल्डर बनाएँ कर सकते हैं और आप एक परिसंपत्ति फ़ोल्डर बनाने के लिए कैसे अगर किसी को इसके बारे में जानता है कर देखेंगे।
  2. अगला यह है कि आपने अपना पेज शोलूड कैसा दिखता है, उदाहरण के लिए- हेडर, no.of guages ​​आदि के लिए एक HTML पृष्ठ डिज़ाइन किया है ... और इसे फ़ोल्डर संपत्ति में रखें।
  3. ऐसी कई साइटें हैं जो This is one site जैसे मार्ग प्रदान करती हैं या आप अन्य साइट ब्राउज़ कर सकते हैं और जो कुछ भी आपको अच्छा लगता है ... !! इसे सभी .js फ़ाइलों सहित ले जाएं और इसे संपत्ति फ़ोल्डर में रखें।
  4. एंड्रॉयड webiview निपटने के लिए एक वर्ग प्रदान करता है कहा जाता है "WebViewClient" आप इंटरनेट में इसके बारे में अधिक पता करने के लिए और अधिक ब्राउज़ कर सकते हैं
  5. यह वेबव्यू सामग्री को देखने के लिए नमूना कोड है ..

    वेब = (WebView) findViewById (R.id.webview01); प्रगतिबार = (प्रोग्रेसबार) 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"); 
           } 
          }); 
    

एचटीएमएल लोड हो रहा है & 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); 
    } 
} 

यह वेबव्यू वर्ग

  1. तुम भी पृष्ठ HTML करने के लिए गतिविधि से डेटा भेज सकते हैं .. Refer This link

कृपया सभी के माध्यम से पढ़ने, सुधार स्वागत कर रहे हैं .. !!

+0

एक चौराहे दृष्टिकोण, लेकिन एक जो फिर भी काम करता है। फिर भी, एंड्रॉइड देव के साथ, कस्टम व्यू हमेशा वेबव्यू – mix3d

+0

के अंदर एचटीएमएल/जेएस से बेहतर प्रदर्शन करते हैं और बेहतर दिखते हैं, ठीक है, मैं एक नौसिखिया हूं और कम समय था .... धन्यवाद @ mix3d क्या आप अपना जवाब विस्तृत कर सकते हैं –

1

मैंने इसे थोड़ी देर पहले बनाया था। क्लोन और संशोधित करने के लिए स्वतंत्र महसूस करें। (यह पुराने Vintage Thermometer से कुछ विचार लेता है।)

github.com/Pygmalion69/Gauge

enter image description here

यह आसानी से अपने Gradle परियोजना में जोड़ा जा सकता:

repositories { 
    maven { 
     url 'https://www.jitpack.io' 
    } 
} 

dependencies { 
    compile 'com.github.Pygmalion69:Gauge:1.1' 
} 

विचारों एक्सएमएल घोषित किये गए हैं:

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