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

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

Войти
Регистрация
Восстановить пароль
 
KypcPerm
5 / 5 / 0
Регистрация: 23.03.2013
Сообщений: 38
#1

Несколько экземпляров класса - Программирование Android

23.03.2013, 14:16. Просмотров 899. Ответов 5
Метки нет (Все метки)

Написал свой View класс, представляет из себя, некоторое подобие джойстика используемого в играх на андроиде:
Большой круг, внутри его маленький шарик, который движется в пределах круга, за касанием пальца. Вот код:

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.example.diplom;
 
 
import java.util.concurrent.TimeUnit;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
 
 
 
 
 public class SomeView extends View implements OnTouchListener
 {
      public Paint paint,paintVn; //внешний вид джойстика
      private int   X,Y,CenterY,CenterX; //центр окружностей джостика
      private int CointPointer;
      
      boolean touch;// флаг касание
      
      
      final static int Radius=20,
                       VnRad=80;
      
      public int GetX(){
          return X;
      }
      public int GetY(){
          return Y;
      }
      
      
      public SomeView(Context context, int x, int y)
      {
          super(context);          
          Log.w("exp", "Заработал конструктор класса");
          
          // настраиваем внешний вид джойстика
          this.paintVn=new Paint();         
          this.paintVn.setColor(Color.BLUE);
          this.paintVn.setStyle(Style.STROKE);
          this.paint = new Paint();
          this.paint.setColor(Color.GREEN);
          this.paint.setStyle(Style.FILL_AND_STROKE);
          
          //устанавливаем координаты джойстика
          X=x;        
          Y=y;
          CenterX=x;
          CenterY=y;
          
          Log.i("exp", "Конструктор класса отработал!");
      }
      
         
      @Override
      public boolean onTouchEvent (MotionEvent event)
      {
          int[] x1=new int[2];
          int[] y1= new int [2]; // точки касания
          int i;
          CointPointer=event.getPointerCount();
        for (i = 0; i < CointPointer; i++) {
            x1[i] = (int) event.getX(i);
            y1[i] = (int) event.getY(i);
            Log.d("exp", "пойманно касание x=" + x1[i] + " y=" + y1[i]+" CX="+CenterX+" CY="+CenterY);
            // обрабатываем нажатие
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:// нажатие на экран
                touch = true;
                break;
            case MotionEvent.ACTION_MOVE:
                // проверяем не выходит ли круг джостика за пределы джостика
                if ((x1[i] - CenterX) * (x1[i] - CenterX) + (y1[i] - CenterY)
                        * (y1[i] - CenterY) <= VnRad * VnRad) {
                    X = x1[i];// если не выходит то перемещаем круг
                    Y = y1[i];
                }
                break;
            case MotionEvent.ACTION_UP: // реализуем возвращение шарика, при
                                        // отпускании
                Thread t = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while ((X != CenterX) || (Y != CenterY)) {
                            if (X > CenterX)
                                X--;
                            if (X < CenterX)
                                X++;
                            if (Y > CenterY)
                                Y--;
                            if (Y < CenterY)
                                Y++;
                            try {
                                TimeUnit.MILLISECONDS.sleep(5);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            Log.w("cicl", "Выхожу в цикл Х=" + X + " СХ="
                                    + CenterX + " Y=" + Y + " CY=" + CenterY);
                        }
                    }
                });
                t.start();
            }
        }
          return true;
      }
            
      @Override
      protected void onDraw(Canvas canvas)
      {
          // рисуем джойстик
          canvas.drawCircle(X, Y, Radius, paint);
          canvas.drawCircle(CenterX, CenterY, VnRad, paintVn);    
          invalidate();
      }
 
 
}
 
  }
В основном классе создается 2 объекта этого класса (левый и правый) которые должны двигаться одновременно (устройство должно поддерживать мультитач):

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// узнаем разрешение экрана
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        hght=metrics.heightPixels;
        wght=metrics.widthPixels;
        Log.d("exp", "Разрешение экрана h="+hght+" !w="+wght);
        
        Log.d("exp", "объявляем классы");
        
        RelativeLayout rl= (RelativeLayout) findViewById(R.id.relative);
        SomeView lJ= new SomeView(this,wght-150,hght-250);
        SomeView  rJ=new SomeView(this,150,hght-250);
        rl.addView(rJ);
        rl.addView(lJ);
Дело в том что 2 экземпляр перехватывает любое нажатие, в свое время первый его даже не обрабатывает. В следствии чего меня интересует, кто нибудь знает как отловить нажатие в конкретной области экрана(в моем случае в окружности нарисованной на Canvas).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 14:16     Несколько экземпляров класса
Посмотрите здесь:

Создание массива экземпляров разных классов - Программирование Android
Здравствуйте! Возникла необходимость создать массив с экземплярами разных классов, так как ~60 строчек похожих по содержанию корректировать...

Вызов класса из класса - Программирование Android
Здравствуйте есть класса Session_stud: public class Session_stud { public static class kurt extends AsyncTask&lt;String, Void,...

Динамический массив экземпляров класса, с неизвестным количеством экземпляров - C++ Builder
Доброго времени суток. По ходу работы, программно должны создаваться и удаляться объекты класса. Во всех примерах с дин массивами...

Несколько экземпляров приложения - C++ WinAPI
Окно первого экземпляра приложения расположить в левом верхнем, второго - в правом верхнем, третьего - в левом нижнем, четвертого - в...

Реализовать несколько экземпляров типа - Turbo Pascal
1.Базовый тип объект &quot;режим вывода&quot; содержит: - Поля: координаты на экране, цвет фона, цвет изображения -методы: инициализации с...

Установить несколько экземпляров ноды - RedHat, Fedora Linux
Подскажите пожалуйста как для каждого пользователя установить свой экземпляр ноды (node.js)? Тоесть есть к примеру: /home/user1/...

несколько экземпляров приложения запускается - Windows 8, 8.1
при загрузку windows 8.1 в процессах загружается несколько экземпляров приложении от asus. как можно сделать что бы было тока по одному...

Создание экземпляров класса - ActionScript
Такая проблема: делал изначально один главный класс проекта (допустим Level1), куча текста и тд. Потом пришлось класс проекта заменить на...

Сравнение экземпляров класса - Python
Как сравнить свойства экземпляров класса? Программа должна взять все экземпляры, сравнить их скорость и вывести максимальную скорость и...

Заполнение экземпляров класса - Delphi
Доброго времени суток. Помогите пожалуйста разобраться. Имеется вот что: Описываем класс Студ в котором содержатся имена студентов и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.03.2013, 13:44     Несколько экземпляров класса #2
видимо второй перекрывает первый.
KypcPerm
5 / 5 / 0
Регистрация: 23.03.2013
Сообщений: 38
25.03.2013, 16:18  [ТС]     Несколько экземпляров класса #3
А как разделить экран что бы не перекрывало?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.03.2013, 16:26     Несколько экземпляров класса #4
их размер не должен быть на весь экран и они должны быть размещены в разных частях екрана
вот пример
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="text1" />
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="text2" />
 
</RelativeLayout>
и научитесь пользоваться XML разметкой, с вашего кода непонятно где эти джойстики размещены и какой у них размер.
KypcPerm
5 / 5 / 0
Регистрация: 23.03.2013
Сообщений: 38
29.03.2013, 09:36  [ТС]     Несколько экземпляров класса #5
и научитесь пользоваться XML разметкой, с вашего кода непонятно где эти джойстики размещены и какой у них размер.
У меня свой View класс, к сожалению я не знаю как сделать свой класс, что бы я мог указывать его место положение через view класс, поэтому месторасположение элемента я указываю в конструкторе своего класса.
А по теме вопрос решен, изменением логикой приложений. За координатами следит layout, который передает их в каждый экземпляр класса, на основе этих координат класс принимает решение о дальнейших действиях.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
29.03.2013, 12:20     Несколько экземпляров класса #6
Цитата Сообщение от KypcPerm Посмотреть сообщение
У меня свой View класс
XML
1
2
3
4
 <com.my.package.MyView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />
Yandex
Объявления
29.03.2013, 12:20     Несколько экземпляров класса
Ответ Создать тему
Опции темы

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