Форум программистов, компьютерный форум CyberForum.ru

Нарисовать круговую диаграмму с разной высотой для каждой части - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Не работает цик(или indexOf() http://www.cyberforum.ru/android-dev/thread1629142.html
Суть кода ниже в том, чтобы находить в строке сочетания символов "ccc" и в них вставлять другой символ. Но программа исправляет только одно сочетание ccc(например в строке "сссaccc" получится "сасассс", вместо "сасасас"). Почему так происходит? Где ошибка? Подскажите пожалуйста!! for (int z = 1; z<=10; z++) { pos = jkl.indexOf("ccc", pos); if (pos...
Android Автокомплит + GoogleMaps У меня есть отдельно приложения, которые: первое приложение - осуществляет автокомплит адресов(имеет поле, в которое пользователь вводит адрес и ему выпадают подсказки адресов) то есть имеет ключ от API Google Places, а второе загружает карту и строит маршрут на ней, то есть имеет ключ API Google Maps. Подскажите как эти 2 приложения можно обьединить в одно(чтобы одно приложение делало и... http://www.cyberforum.ru/android-dev/thread1629123.html
Android Разблокировка функций в приложении
Допустим купили в моем приложении допфункционал. Само приложение в целом работает офлайн. Биллинг вернул true, все хорошо, все счастливы, функции разблокированы. Теперь закрываем и заново открываем приложение, как теперь разблокировать функции? Т.е. надо после покупки писать в SharedPreferences метку, а при открытии - ее считывать, но это слишком просто мне кажется. Или так и нужно? И еще...
Android Как не допустить создание потока еще раз?
Задача. Выполнять действие в фоне даже после закрытия приложения (в отдельном потоке) - работает. Но вот после повторного запуска приложения я пытаюсь проверить запущен ли поток и если нет - запустить его: public void myBackThreads() { final Thread myThread = new Thread(new Runnable() { @Override public void run() {
Android Вывести время в toolbar http://www.cyberforum.ru/android-dev/thread1629003.html
Привет. Извиняйте за нубский вопрос, но как самое просто вывести текущее время. Как разместить\получить и отформатировать время я знаю, вопрос в том нет ли уже готовыз каких то простых механизмов для вывода времени, или нужно создавать отдельный поток или таймер и через handler обновлять на главном активити?
Android Как можно сделать линию толще (Google Maps) Я рисую путь на Google Map между двумя точками как сделать линию соединяющую эти две точки толще?? подробнее

Показать сообщение отдельно
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106

Нарисовать круговую диаграмму с разной высотой для каждой части - Android

30.12.2015, 16:40. Просмотров 346. Ответов 13
Метки (Все метки)

У меня тут вопрос вообще не решаемый как по мне, сижу пытаюсь сделать вот диаграмму с разной высотой для каждого из элементов диаграммы. Во вложении то что должно получиться.... В общем пока что получается только сделать круговую диаграмму, но высоту все никак не пойму как можно регулировать, может кто то с таким сталкивался и знает как лучше такое сделать?

Делать пытаюсь на канвасе, код который рисуте круговую диаграмму ниже
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class RoundView extends View {
    private Paint slicePaint;
    private int[] sliceClrs = { Color.GREEN, Color.BLUE, Color.RED, Color.YELLOW };
    private RectF rectf;
    private float[] datapoints;
 
    public RoundView(Context context, AttributeSet attrs) {
        super(context, attrs);
        slicePaint = new Paint();
        slicePaint.setAntiAlias(true);
        slicePaint.setDither(true);
        slicePaint.setStyle(Paint.Style.FILL);
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        if (this.datapoints != null) {
            int startTop = 0;
            int startLeft = 0;
            int endBottom = getWidth();
            int endRight = endBottom;
 
            rectf = new RectF(startLeft, startTop, endRight, endBottom);
 
            float[] scaledValues = scale();
            float sliceStartPoint = 0;
            for (int i = 0; i < scaledValues.length; i++) {
                slicePaint.setColor(sliceClrs[i]);
                canvas.drawArc(rectf, sliceStartPoint, scaledValues[i], true, slicePaint);
                sliceStartPoint += scaledValues[i];
            }
        }
    }
 
    public void setDataPoints(float[] datapoints) {
        this.datapoints = datapoints;
        invalidate();
    }
 
    private float[] scale() {
        float[] scaledValues = new float[this.datapoints.length];
        float total = getTotal();
        for (int i = 0; i < this.datapoints.length; i++) {
            scaledValues[i] = (this.datapoints[i] / total) * 360;
        }
        return scaledValues;
    }
 
    private float getTotal() {
        float total = 0;
        for (float val : this.datapoints)
            total += val;
        return total;
    }
}
Вызываем вот так
Java
1
2
3
RoundView pieChartView = (RoundView) findViewById(R.id.round);
        float[] datapoints = {450, 1230, 200, 400};
        pieChartView.setDataPoints(datapoints);
Рисует просто круг и елит его на части... Что то мне подсказывает что нужно искать и делать как то по другому, потому что в канве не получается так гибко это реализовать... А может я чего то не знаю) Подскажите что нибудь плиз)
Миниатюры
Нарисовать круговую диаграмму с разной высотой для каждой части  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru