Простой вид датчика, такой как спидометр в Android?

Я хочу иметь простое представление датчика, где я буду определять начальное значение и конечное значение и иметь указатель для отображения заданного значения переменной.

введите здесь описание изображения

Так что я могу показать заданное значение, как спидометр. Например, если мое значение textView равно 1300, то рядом с текстовым представлением я хочу иметь эту пользовательскую анимацию представления счетчика, подобную этой!

Это возможно? Любой существующий пример кода?


person oikonomopo    schedule 23.09.2012    source источник


Ответы (7)


Другой я нашел в Evelina Vrabie's blog, использовал его и работал отлично!

Посмотрите на Evelina Vrabie's GitHub. Он имеет библиотеку датчиков и несколько образцов для взаимодействия.

Большое спасибо владельцу Эвелине Врабие!


введите здесь описание изображения

Однако он не работает на XHDPI/нескольких версиях устройств Android (выше 4). Проблема заключается в тексте в представлении датчика.

person oikonomopo    schedule 22.01.2013
comment
Большое спасибо, что сэкономили мое время..! - person Ramesh Akula; 24.01.2013
comment
Те эта точка зрения еще работает?? Я получаю эту ошибку при ее использовании: java.lang.NullPointerException в android.content.res.BridgeResources.getString(BridgeResources.java:501) в android.content.Context.getString(Context.java:334) в org.codeandmagic. android.gauge.GaugeView.readAttrs(GaugeView.java:224) в org.codeandmagic.android.gauge.GaugeView.‹init›(GaugeView.java:170) в org.codeandmagic.android.gauge.GaugeView.‹init›( GaugeView.java:175) в ......... - person Or Kazaz; 18.08.2013
comment
Это потрясающе. Как вы его настраиваете? например, установить другой стиль иглы? - person Machado; 10.11.2014
comment
Он не настроен для gradle. Как использовать его с проектом Android сейчас? - person Kruti Parekh; 05.03.2019

Для тех, кто ищет простой вид датчика, я сделал библиотеку, которую вы можете клонировать и использовать/модифицировать для своих нужд.

CustomGauge

введите здесь описание изображения

person pkleczko    schedule 18.10.2014
comment
хорошая библиотека, но мне она нужна только на 180 градусов, как я могу подойти к этому - person Mina Fawzy; 24.06.2015
comment
Я использовал вашу библиотеку, но она показывает ошибку во всех атрибутах gauge:***. Я добавил xmlns:gauge="http://schemas.android.com/apk/res-auto", но все еще получаю ошибки. @pkleczko Можете ли вы сказать, что не так? - person Nirmal Raj; 12.07.2016
comment
Плохо, что это лицензия GPL, что для меня невозможно. - person lschuetze; 21.07.2016
comment
@lschuetze - пожалуйста, не стесняйтесь использовать его для любых целей. Почему вам недостаточно GPL? - person pkleczko; 24.07.2016
comment
Это абсолютно здорово! Спасибо. Мне это нравится, потому что это просто, но все еще хорошо выглядит. - person Led; 15.07.2017
comment
не могли бы вы ответить на вопрос @NirmalRaj? Я использовал вашу библиотеку, но она показывает ошибку во всех атрибутах Gauge: ***. Я столкнулся с той же проблемой. - person Mann; 21.06.2018
comment
@Mann Мне не удалось устранить ошибку, с которой я столкнулся, поэтому я написал свой собственный код вместо использования библиотеки. - person Nirmal Raj; 26.06.2018
comment
@NirmalRaj, эй, нирмал, на самом деле я учил, что помечаю автора, спрашивая решение для его библиотеки. Во всяком случае, я нашел решение для этого, используйте его как app:gaugeEndValue вместо gauge:EndValue. оно работает. - person Mann; 26.06.2018

Все другие датчики, которые вы рекомендовали, имеют ошибки и не работают на Kitkat и Lollipop. Также здесь нет Android Studio и градуированной библиотеки.

Вот репозиторий git для более свежего, обновленного для Lollipop, который вы можете использовать с Gradle:

введите здесь описание изображения

После того, как вы включите библиотеку в свой проект, добавьте 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() {}
   };
}

Это создаст экземпляр иглы и заставит его анимировать переход к случайным значениям.

person Sulejman Sarajlija    schedule 12.04.2015
comment
Привет, @sulejman, для этой библиотеки установлена ​​версия minSdk 21, это слишком много для моего приложения, поэтому, когда я импортирую ее в свое приложение с версией minSdk 9, я получаю ошибки слияния во время сборки, не могли бы вы установить minSdk на более низкую версию или предложить обходной путь? - person user3677331; 08.07.2015
comment
Вы можете установить его самостоятельно, но я не уверен, что он действительно будет работать с 9 уровнем, он думает, что он работает с 13, но просто установлен на 21. Загрузите библиотеку из git и поиграйтесь :) - person Sulejman Sarajlija; 14.07.2015
comment
мы можем применить отрицательное значение к этому GaugeView. я пробовал но не получилось - person Amol Sawant 96 Kuli; 27.07.2015
comment
@Mehrdad Извините, я долгое время был неактивен, если это поможет, я обновил ссылку. - person Sulejman Sarajlija; 11.12.2016
comment
Поддерживает ли он отрицательные значения? - person Moeez; 07.05.2021
comment
И это бесплатное использование? - person Moeez; 07.05.2021
comment
где зависимость? - person Moeez; 07.05.2021

Я сделал это некоторое время назад. Не стесняйтесь клонировать и изменять. (Некоторые идеи взяты из старого Винтажного термометра< /а>.)

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);
person Pygmalion    schedule 17.09.2017

На этом сайте вы найдете несколько бесплатных настраиваемых датчиков.

ScComponents

Очень прост в установке и хорошо документирован. Например, вы можете бесплатно получить что-то подобное за 5 минут, следуя инструкции ниже.

введите здесь описание изображения

Зайдите на указанный выше сайт. Нажмите GR004 и после появления всплывающего окна нажмите «Скачать бесплатно». Библиотека будет загружена, разархивирована и следуйте инструкциям по установке библиотеки (файл aar) внутри вашего проекта Android.

Напишите этот код в своем макете XML, и ваш датчик будет готов:

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

У вас есть много вариантов XML для его настройки:

  • sccAnimDuration
  • сккэнаблетач
  • sccInverted
  • sccFontName
  • sccLabelsSizeAdjust
  • sccMajorTicks
  • sccMaxValue
  • sccMinorTicks
  • sccMinValue
  • sccShowContour
  • sccShowLabels
  • sccтекст
  • sccValue

И связанная с этим функция путем кодирования.

person Samuele Carassai    schedule 05.06.2018

Я не знаю, поможет ли поздний ответ или нет. Я также пришел к той же ситуации, когда я хочу использовать датчик для визуализации данных, поскольку датчик не предоставляется в виде виджета в Android, как энтузиаст, я выбрал библиотеки, подобные приведенным выше, которые можно найти по различным ссылкам в Интернете, хотя это был весьма полезен (спасибо его замечательным авторам ..) мне трудно визуализировать в определенных ситуациях, поэтому еще одно решение, которое я сделал для своего приложения, - это я интегрировал датчики JavaScript в свое приложение для Android. Вы можете сделать это, выполнив следующие шаги

  1. Создайте папку активов в нашем проекте — смотрите эту ссылку и вы увидите, как создать папку активов, если кто-то не знает об этом.
  2. Следующим шагом является дизайн html-страницы о том, как должна выглядеть ваша страница, например, заголовок, количество датчиков и т. д., и поместите ее в папку с активами.
  3. Есть много сайтов, которые предоставляют такие параметры, как Это один сайт, или вы можете просматривать другие сайты и брать то, что вам нравится. ...!! возьмите все это, включая файлы .js, и поместите в папку активов.
  4. Android предоставляет класс для обработки веб-просмотра под названием "WebViewClient", вы можете просмотреть больше, чтобы узнать больше об этом в Интернете.
  5. Это пример кода для просмотра содержимого веб-просмотра.

    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 и javascript.

 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-страницу. ">Перейти по этой ссылке

Пожалуйста, прочитайте все, исправления приветствуются..!!

person Community    schedule 09.01.2017
comment
Окольный подход, но тем не менее работающий. Тем не менее, с Android dev пользовательские представления всегда работают и выглядят лучше, чем HTML/JS внутри веб-представления. - person mix3d; 23.02.2017
comment
Ну, я новичок, и у меня было меньше времени .... Спасибо @mix3d, можете ли вы уточнить свой ответ? - person ; 24.02.2017

Используйте это: Пример проекта

Его можно легко добавить в ваш проект 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" />
person Jigs Patel    schedule 14.08.2019
comment
Это круто, но максимальная скорость и градуировка жестко запрограммированы. - person KeatsKelleher; 22.01.2020