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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
strevg
1 / 1 / 0
Регистрация: 24.06.2013
Сообщений: 57
#1

Размер view по время выполнения - Программирование Android

21.08.2013, 16:28. Просмотров 1315. Ответов 6
Метки нет (Все метки)

Здрасте
Создаю класс наследованный от view. В нем рисуют на canvas. Только перед рисованием мне нужно узнать размер view или canvas. Как это сделать?
спс
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;
 
public class MainActivity extends Activity{
    GrafView Graf;
    class point{
        public float x,y;
        public point()
        {
            x=y=0;
        }
    }
    
    class GrafView extends View {
        Paint paint;
        int count;
        point dxy = new point();
        point[] arrays_points;
        protected float start_point, end_point,dh;
        private point[] pnt_touch; // массив координат касания
        protected point center = new point();
        public GrafView(Context context) {
            super(context);
            paint = new Paint();
            count=100;
            arrays_points = new point[count];
            pnt_touch = new point[2];
            dxy.x=dxy.y=10;
            paint.setColor(Color.GREEN);
            paint.setStrokeWidth(3);
            start_point=-10; end_point=10;
            Log.d("size", ""+center.x+"  "+center.y);
        }
        
        float func(float i)
        {
            return 4*i+5;
        }
        
        protected void calc_point(Canvas canvas)
        {
            int i=0;
            dh=(end_point-start_point)/count;
            for (float j=start_point;j<end_point-dh;j+=dh,i++)
            {
                point pnt=new point();
                pnt.x=dxy.x*j;
                pnt.y=dxy.y*func(j);    
                arrays_points[i]=pnt;
                //Log.d("my", ""+arrays_points[i].x+"  "+arrays_points[i].y+"   "+i);
            }
        }
        private void onDrawAxis(Canvas canvas)
        {
            Paint line = new Paint();
            line.setColor(Color.BLACK);
            line.setStrokeWidth(2);
            canvas.drawLine(center.x, 0, center.x, canvas.getHeight(), line);
            canvas.drawLine(0, center.y, canvas.getWidth(), center.y, line);
        }
        protected void onDrawPoints(Canvas canvas)
        {
            for (int i=0;i<count-1;i++)
            {
                canvas.drawLine((arrays_points[i].x+center.x), (-arrays_points[i].y+center.y),
                        (arrays_points[i+1].x+center.x), (-arrays_points[i+1].y+center.y), paint);
            }
        }
        
        protected void onDraw(Canvas canvas) {
            canvas.drawRGB(255, 255, 255);
            calc_point(canvas);
            onDrawAxis(canvas);
            onDrawPoints(canvas);
            }
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Graf = new GrafView(this);
            setContentView(Graf);
        }
P.S
В коде у меня это надо для определения центра этой вьюшки или канвы(center.x и center.y)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
verylazy
Заблокирован
21.08.2013, 16:54     Размер view по время выполнения #2
myView.getWidth() и myView.gwtHeight(); по идее
а если в методе самой вьюшки надо координаты самой себя то this.getWidth();
или я не понял вопроса
strevg
1 / 1 / 0
Регистрация: 24.06.2013
Сообщений: 57
22.08.2013, 19:23  [ТС]     Размер view по время выполнения #3
Мне надо узнать размер canvas до рисования на ней(т.е. перед тем как нарисовать на ней). При использовании getHeight() или getWidth() возвращаются 0.
name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
22.08.2013, 19:37     Размер view по время выполнения #4
Java
1
2
3
4
5
6
7
8
9
10
11
public class MainActivity extends Activity {
  
    public static int WIDTH_DEVICE;
    public static int HEIGTH_DEVICE;
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        Display display = getWindowManager().getDefaultDisplay();
        WIDTH_DEVICE = display.getWidth();
        HEIGTH_DEVICE = display.getHeight();
     }
}
strevg
1 / 1 / 0
Регистрация: 24.06.2013
Сообщений: 57
22.08.2013, 19:53  [ТС]     Размер view по время выполнения #5
Конечно спасибо. Но если canvas занимает не весь экран, а только часть?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.08.2013, 20:18     Размер view по время выполнения #6
попробуйте getMeasuredHeight/getMeasuredWidth
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 20:50     Размер view по время выполнения
Еще ссылки по теме:
Android Изменить имя ресурса во время выполнения программы
Про необновляемость вьюх во время выполнения UI-поток Android
Закрыть диалог во время выполнения процесса (принудительное срабатывание dismiss() Android
Public void onClick(View view) Android
View вытесняет другое view из activity Android

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

Или воспользуйтесь поиском по форуму:
strevg
1 / 1 / 0
Регистрация: 24.06.2013
Сообщений: 57
22.08.2013, 20:50  [ТС]     Размер view по время выполнения #7
Пробовал. Тоже 0 возвращает. Может нужно вызывать размер канвы не в onCreate, а в другой процедуре, которая выполняется после onCreate, но перед onDraw()?Только я не знаю, что это за процедура.
Yandex
Объявления
22.08.2013, 20:50     Размер view по время выполнения
Ответ Создать тему
Опции темы

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