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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.87
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
#1

Нарисовать график на виджете - Программирование Android

28.03.2012, 17:17. Просмотров 4702. Ответов 13
Метки нет (Все метки)

Сопсно стал вопрос как, пытался сделать дедовским способом, создал вью и нарисовал на нем, попытался вставить в main.xml ничего не вышло, соответственно попытался сделать то же саоме в моем классе который наследует класс AppWidgetProvider, так же ничего не вышло, полазил по интернету набрел на блог в котором написано как но куда писать или вставлять его код не известно, может кто-то сталкивался и знает как это можно сделать? Хелп плиз.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 17:17     Нарисовать график на виджете
Посмотрите здесь:

Текст в виджете - Программирование Android
Здравствуйте господа форумчане!)Подскажите пожалуйста новичку... Как добавить текст в TextView на виджете? Знаю, что добавить текст в...

Изменить размер шрифта в виджете - Программирование Android
Т.к. в AppWidgetProvider не используется findViewById используют класс RemoteView. RemoteViews rv= new...

Создать кнопку и действие на нее на виджете - Программирование Android
Как создать кнопку и действие на нее на виджете? Добавлено через 3 часа 22 минуты Никто не знает?:(

Как в виджете отловить, что экран повернулся - Программирование Android
Во собственно и все. Какое событие нужно ловить? Спасибо.

Как добавить поддержку прокрутки в собственном виджете? - Программирование Android
Здравстсвуйте! Проблема в следующем: создаю активити, в которой будет динамически рисоватья различная гграфика на канве в качестве...

Нарисовать фигуру на виджете - C++ Qt
Задача - нарисовать фигуру поверх виджета QTableWidget (а лучше за его сеткой). Знаю, что в интернете много примеров с QPainter, однако в...

Нарисовать График - Turbo Pascal
Помогите нарисовать График очень нужно y=sqrt x3+2x2 помогите очень нужно

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
efirist
2 / 2 / 0
Регистрация: 23.03.2012
Сообщений: 20
28.03.2012, 22:30     Нарисовать график на виджете #2
непонятно подвижный ли график. или это изоображение в виде графика :/.....
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
28.03.2012, 22:56  [ТС]     Нарисовать график на виджете #3
Цитата Сообщение от efirist Посмотреть сообщение
непонятно подвижный ли график. или это изоображение в виде графика :/.....
График в движении, он будет рисоваться в зависимости от подающихся данных с удаленного сервера.
efirist
2 / 2 / 0
Регистрация: 23.03.2012
Сообщений: 20
29.03.2012, 00:02     Нарисовать график на виджете #4
пользуй SurfaceView в сети есть примеры.Немного низкоуровнености но зато будут полноценные графики с желаемой задержкой кадров(как в GameCanvas в j2me)
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
29.03.2012, 00:05  [ТС]     Нарисовать график на виджете #5
Цитата Сообщение от efirist Посмотреть сообщение
пользуй SurfaceView в сети есть примеры.Немного низкоуровнености но зато будут полноценные графики с желаемой задержкой кадров(как в GameCanvas в j2me)
Как бы выразиться что бы не оскробить? Я уже написал что я пытался так сделать, но оно не работает таким способом, нужно что-то другое. И так для справки, я писал уроки по созданию игры и написал две игры, у меня опыт в разработке есть.
Bes-s
30 / 30 / 2
Регистрация: 05.11.2011
Сообщений: 178
29.03.2012, 18:14     Нарисовать график на виджете #6
эм... а можно код вашего view? гляну, мож подскажу чтот, у меня почти все реализованно через кастомные view.
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
29.03.2012, 18:35  [ТС]     Нарисовать график на виджете #7
Цитата Сообщение от Bes-s Посмотреть сообщение
эм... а можно код вашего view? гляну, мож подскажу чтот, у меня почти все реализованно через кастомные view.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ViewS extends View {
      private Bitmap bmp;
       Paint paint;
      public ViewS (Context context) {
            super(context);
             paint = new Paint();
 
        paint.setFlags(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED);
      }
      @Override
      protected void onDraw(Canvas canvas) {
          canvas.drawColor(Color.BLACK);
          canvas.drawLine(0, 0, 128, 128, paint);
      }
}
UPD:
Пытался сделать по другому, не рисуя на вью и на сюрфейсах, просто взять и намалевать на imageView:
Создал отдельный класс малевания:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Graph {
    public Bitmap getBitmap() {
        Bitmap bitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
 
        canvas.drawColor(Color.WHITE);
 
        Paint paint = new Paint();
 
        paint.setFlags(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED);
        canvas.drawLine(0, 0, 128, 128, paint);
        return bitmap;
    }
}
Прописал имаджВьью
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:background="@drawable/ic_launcher">
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
 
</RelativeLayout>
Вставил вызов класса рисования в главный класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MainActivity extends AppWidgetProvider {
    public Bitmap bitmap;
     
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.main);
 
        Graph graph = new Graph();
        rViews.setImageViewBitmap(com.w.R.id.imageView1, graph.getBitmap());
 
        appWidgetManager.updateAppWidget(com.w.R.id.imageView1, rViews);
    }
}
И ничего не рисует...
Bes-s
30 / 30 / 2
Регистрация: 05.11.2011
Сообщений: 178
29.03.2012, 19:36     Нарисовать график на виджете #8
как то слишком запутанно...
дам свой рабочий кусок кода. может что то где то принципиально неправильно, зато работает.
в xml:
XML
1
2
3
4
5
6
<com.blablabla.blabla.Graph
            android:id="@+id/graph"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:layout_below="@id/downline"
            android:layout_above="@id/buble"/>
в main:
Java
1
2
3
fgGraph=(Graph) findViewById(R.id.graph); //подключаем 
 
fgGraph.reDraw(); //задаем значения для рисования + рисуем.
и сам график:
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
56
57
58
59
package com.blablabla.blabla;
 
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
 
public class Graph extends View
{
    private boolean drawGraph;
    private float w,h, tempX, tempY;
    
    public Graph(Context context, AttributeSet attrs) //сетается при создании View 
    {
        super(context, attrs);
        Log.i("fgLog", "start!");
        drawGraph=false;
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        Log.i("fgLog","drawing");
        w=this.getWidth();
        h=this.getHeight();
        
        Paint p=new Paint();
        p.setStyle(Paint.Style.STROKE);
        p.setStrokeWidth(2);
        p.setFlags(Paint.ANTI_ALIAS_FLAG);
        
        Float part = w/26;
        
        if(drawGraph) //если команда дана - рисуем.
        {
            for(int i=0;i<25;i++)
            {
                canvas.drawLine(part, h/10, part, h, p);
                if(i==0||i==6||i==12||i==18||i==24)
                {
                    p.setColor(0xff000000);
                    canvas.drawLine(part, h/10, part, h, p);
                    p.setColor(0x88000000);
                }
                part+=w/26;
            }
        }
        drawGraph=false;
        Log.i("fgLog","end draw");
    }
    public void reDraw() //внешняя команда на перерисовку
    {
        drawGraph=true;
    }
    
}
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
29.03.2012, 19:38  [ТС]     Нарисовать график на виджете #9
В виджетах такое увы не работает...
Класс AppWidgetProvider не знает такого:
Java
1
graph=(Graph) findViewById(R.id.graph);
Bes-s
30 / 30 / 2
Регистрация: 05.11.2011
Сообщений: 178
29.03.2012, 20:14     Нарисовать график на виджете #10
а черт... в виджетах))


Добавлено через 32 минуты

можно создать программно(не знаю сработает али нет, с виджетами не работал пока)
Java
1
2
3
4
5
paramsR = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 
Graph fgGraph = new Graph(this.getContext());
fgGraph.setLayoutParams(paramsR);
this.addView(fgGraph);
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
30.03.2012, 18:26  [ТС]     Нарисовать график на виджете #11
Цитата Сообщение от Bes-s Посмотреть сообщение
а черт... в виджетах))


Добавлено через 32 минуты

можно создать программно(не знаю сработает али нет, с виджетами не работал пока)
Java
1
2
3
4
5
paramsR = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 
Graph fgGraph = new Graph(this.getContext());
fgGraph.setLayoutParams(paramsR);
this.addView(fgGraph);
Не) Не будет работать, опять же этот класс не знает этих всех функций.

Добавлено через 20 часов 39 минут
Даже так не работает ):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews views = new RemoteViews(context.getApplicationContext().getPackageName(), R.layout.main);  
        
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);
        paint.setTextSize(16);
        paint.setAntiAlias(true);
        paint.setTypeface(Typeface.MONOSPACE);
        
        Bitmap mybitmap = Bitmap.createBitmap(100, 16, Bitmap.Config.ALPHA_8);
        Canvas c = new Canvas(mybitmap);
        
        c.drawColor(Color.BLACK);
        c.drawText("fdgfdgfdgfdfdfdgGFDFGFDDDDG", 0, 0, paint);
        
        views.setImageViewBitmap(R.id.imageView1, mybitmap);  
    }
Bes-s
30 / 30 / 2
Регистрация: 05.11.2011
Сообщений: 178
30.03.2012, 19:41     Нарисовать график на виджете #12
http://stackoverflow.com/questions/4...ew-not-working тут аналогичная проблема, вроде как есть решение для кастомных View...
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
30.03.2012, 21:00  [ТС]     Нарисовать график на виджете #13
Цитата Сообщение от Bes-s Посмотреть сообщение
http://stackoverflow.com/questions/4...ew-not-working тут аналогичная проблема, вроде как есть решение для кастомных View...
Ну как я понял он сделал вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
 public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews views = new RemoteViews(context.getApplicationContext().getPackageName(), R.layout.main);  
        
        Chart myView = new Chart(context, null);
        myView.measure(150,150);
        myView.layout(0,0,150,150);
        myView.setDrawingCacheEnabled(true);
        
        Bitmap bitmap=myView.getDrawingCache();
        
        views.setImageViewBitmap(R.id.imageView1, bitmap);
    }

Но у меня все равно не работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2012, 14:10     Нарисовать график на виджете
Еще ссылки по теме:

Нарисовать график - Java
Добрый день! Подскажите библиотеку, которая может рисовать интервальный график. Есть данные: x,ymin,ymax.

Нарисовать график - Turbo Pascal
Помогите с задачкой, во время запуска рисуются лишь координатные оси , а сам граик не рисуется, в чем дело, все необходимые библиотеки...

Нарисовать график - Visual Basic
Срочно нуждаюсь в помощи. С ВБ никогда не работал (немного рублю в Delphi). Завтра мне нужно сдать сдать программу, а обучиться...

нарисовать график - Delphi
дано три массива чиссел которые обозначають длину в мм. x:={0;1,87;3,75;7,5;15;30;45;60;75;90;105;120;135;150} ...

Нарисовать график - Matlab
Ребят, помогите нарисовать график, дали в институте на самообучение , программа замудренная, как не рисовал, выходит немного не то, может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
14.04.2012, 14:10  [ТС]     Нарисовать график на виджете #14
http://dajver.blogspot.com/2012/04/canvas-android.html решение
Yandex
Объявления
14.04.2012, 14:10     Нарисовать график на виджете
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru