2012-09-23 74 views
14

Quiero tener una vista de indicador simple donde definiré el valor de inicio y el valor final y un puntero para mostrar el valor de la variable determinada.vista de indicador simple como velocímetro en android?

enter image description here

, así que puede mostrar un valor dado como speedmeter. Por ejemplo, si mi valor de una vista de texto es 1300, entonces, junto a la vista de texto, quiero tener esta animación de vista de medidor personalizada de esta manera.

¿Es posible? ¿Algún código de ejemplo existente?

Respuesta

22

Otro que encontré en Evelina Vrabie's blog, lo usé y funcionó perfecto!

Mire Evelina Vrabie's GitHub. Tiene una biblioteca de indicadores y algunas muestras para interactuar.

Muchas gracias al propietario Evelina Vrabie!


enter image description here

Sin embargo, no está trabajando en xhdpi/algunas versiones de dispositivos Android (por encima de 4). El problema es el texto en la vista de medidor.

+0

Muchas gracias por ahorrarme tiempo ...! –

+0

¿Esas vistas todavía funcionan? Me aparece este error al usarlo: java.lang.NullPointerException en android.content.res.BridgeResources.getString (BridgeResources.java:501) en android.content.Context.getString (Context.java:334) en org .codeandmagic.android.gauge.GaugeView.readAttrs (GaugeView.java:224) en org.codeandmagic.android.gauge.GaugeView. (GaugeView.java: 170) en org.codeandmagic.android.gauge.GaugeView. (GaugeView.java:175) en ......... –

+0

¡Para mí funcionó a la perfección! – oikonomopo

13

Para cualquiera que busque una vista de ancho de vía simple, hice una biblioteca que puede clonar y usar/modificar para sus necesidades.

CustomGauge

enter image description here

+0

buena biblioteca, pero la necesito solo en 180 grados, ¿cómo puedo acercarme a esa –

+1

? Usé su biblioteca pero está mostrando un error en todos los atributos' calibre: *** '. Agregué 'xmlns: gauge =" http://schemas.android.com/apk/res-auto "' pero seguí recibiendo los errores. @pkleczko ¿Puedes decir lo que está mal? –

+0

Lo malo es una licencia GPL que no es posible para mí. – lschuetze

11

Todos los demás indicadores que usted recomienda tener fallos y no se ejecuta bien en Kitkat y Lollipop. Además, no hay una biblioteca compatible con Android Studio y Gradle aquí.

Aquí es repositorio git para la más reciente actualización para Lollipop puede utilizar con Gradle:

enter image description here

Después de incluir la biblioteca en su proyecto añadir gaugelibrary a XML diseño de su actividad:

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

Esto mostrará el indicador estático sin aguja. Para crear una instancia de la aguja con animación aleatoria, debe hacer eso en el archivo de la clase de actividad. Vea cómo se hace aquí:

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

Esto instanciará la aguja y la animará moviéndose a valores aleatorios.

+0

Hola @sulejman esta biblioteca tiene la versión minSdk establecida en 21, que es un poco demasiado alta para mi aplicación así que cuando la importo a mi aplicación con la versión minSdk de 9 obtengo errores de fusión en el momento de la compilación, ¿puede establecer el minSdk a una versión más baja o proponer un work-around? – user3677331

+0

Puedes configurarlo por tu cuenta, pero no estoy seguro de si realmente funcionará con 9 niveles, creo que funciona desde 13, pero está configurado como 21. Descarga la biblioteca de git y juega :) –

+0

puede Aplicamos valor negativo a este GaugeView. Intenté pero no éxito –

2

No sé si la respuesta tardía ayudará o no. También llegué a la misma situación en la que quiero usar un medidor para visualizar datos, dado que el indicador no se proporciona como widget en Android, como entusiasta fui a bibliotecas como las anteriores, que se pueden encontrar a través de varios enlaces en Internet, aunque fue bastante útil (gracias a los maravillosos autores de esto)) me resulta difícil visualizarlo durante ciertas situaciones, por lo que otra solución de lo que he hecho es que para mi aplicación integé los medidores de JavaScript en mi aplicación de Android. Puede hacerlo mediante los siguientes pasos

  1. Crear una carpeta de recursos en nuestro proyecto- look this link y verá cómo crear una carpeta de recursos si alguien no sabe hacer al respecto.
  2. El siguiente es diseñar una página html sobre el aspecto de su página, por ejemplo, encabezado, no de idiomas, etc., y colocarla en el activo de la carpeta.
  3. Hay muchos sitios que proporcionan los códigos como This is one site o puede navegar por otros sitios y tomar lo que sea que se sienta bien ... !! tómelo todo, incluidos los archivos .js y colóquelo en la carpeta de activos.
  4. Android proporciona una clase para el manejo de webiview llamados "WebViewClient" se puede navegar más para saber más sobre él en Internet
  5. Esto es código de ejemplo para ver el contenido vistas web ..

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

El anteriormente para cargar el 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); 
    } 
} 

Este la clase vistaweb

  1. También puede enviar los datos de la actividad a la página html .. Refer This link

leer atentamente a través de todo, las correcciones son bienvenidos .. !!

+0

Un enfoque indirecto, pero que no obstante funciona. Aún así, con el desarrollo de Android, las vistas personalizadas siempre funcionan y se ven mejor que HTML/JS dentro de una vista web – mix3d

+0

Bueno, soy un principiante y tenía menos tiempo ... Gracias @ mix3d ¿puedes elaborar tu respuesta? –

1

Hice esto hace un tiempo. Siéntase libre de clonar y modificar. (Se necesita algunas ideas de la vieja Vintage Thermometer.)

github.com/Pygmalion69/Gauge

enter image description here

Se pueden añadir fácilmente a su proyecto Gradle:

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

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

Las vistas son declarados en 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" /> 

Ella e es un ejemplo de configuración de los valores mediante programación:

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