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

Как реализовать обращение из SurfacView к TextView в основной Активити - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как из AsyncTask Добавить элементы в ListView http://www.cyberforum.ru/android-dev/thread966501.html
В общем сабж. Используя адаптер как сделать?
Программирование Android Андроид приложение для интернет магазина на движке Magento Получил задание написать мобильное приложение для интернет магазина, который создан на движке Magento. Никак не получается сформировать запрос на получение ответа с сайта в json-формате. В... http://www.cyberforum.ru/android-dev/thread966363.html
Программирование Android c++/c#/Java
Давно хочу задать вопрос знатокам (я не пытаюсь развести холивар на вечную тему, интересуюсь Вашим мнением как более опытных товарищей). И решил я это сделать после просмотра этого видео...
Программирование Android ExecutorService "замораживает" UI
В методе парсю несколько страниц сайта. UI подвисает. Как исправить ситуацию ExecutorService executor = Executors.newCachedThreadPool(); Future<List> future = executor.submit(new Callable<List>()...
Программирование Android Добавить столбец в существующую базу http://www.cyberforum.ru/android-dev/thread966122.html
Подскажите, а то не могу разобраться. Как в существующую таблицу SqLite добавить новый столбец ??? знаю, что нужно использовать Upgrade, а вот как его использовать не понимаю. Помогите?
Программирование Android Уведомления Приветствую, форумчане! Возникла такая задача, при написании приложения... Нужно чтобы в определённый период каждого месяца приложение автоматически выводило(напоминало) пользователю о (например!)... подробнее

Показать сообщение отдельно
Роmaн
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 8

Как реализовать обращение из SurfacView к TextView в основной Активити - Программирование Android

01.10.2013, 17:13. Просмотров 606. Ответов 8
Метки (Все метки)

Всем Добрый День! Не знаю правильно или нет, но хотел сделать разметку поделив экран на две области, нижняя область отображает графику, в верхней отображение статистики в элементе TextView.
Проблема обращения к TextView в основном потоке из класса MainGame, спотыкается на tv.setText("счетчик кликов"); Подскажите плиз, как сделать правильно? Заранее благодарен!

Разметка экрана:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="1" >
 
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.7" >
 
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
 
    </LinearLayout>
 
    <LinearLayout
        android:id="@+id/gamelayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.3"
        android:orientation="vertical" >
 
    </LinearLayout>
 
</LinearLayout>
Основная Активити:
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
package com.example.battlesea;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Game  extends Activity{
    private static final String TAG = "Battle Sea" ;
    public static final String KEY_DIFFICULTY="Difficulty Level";
    public static final int DIFFICULTY_EASY = 0;
    public static final int DIFFICULTY_MEDIUM = 1;
    public static final int DIFFICULTY_HARD = 2;
    private MainGame gameView;
    private LinearLayout layout;
     private TextView tv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate" );
        int diff = getIntent().getIntExtra(KEY_DIFFICULTY,
                DIFFICULTY_EASY);
        
        setContentView(R.layout.main_game);
        layout=(LinearLayout) findViewById(R.id.gamelayout);
        gameView = new MainGame(this);
        
        layout.addView(gameView);
        gameView.requestFocus();
    }
    
   
}
Класс отображения графики

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
package com.example.battlesea;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
 
public class MainGame extends SurfaceView implements SurfaceHolder.Callback {
     private MainThread thread;
     private int[] BenArr;
     private float width; // ширина одного тайла
        private float height; // высота одного тайла
        private int selX; // координата x выделенной области
        private int selY; // координата y выделенной области
        private static final String TAG = "battle";
        private TextView tv;
        
public MainGame(Context context) {  
super(context);
getHolder().addCallback(this);
BenArr = new int[100];
closeAllCell();
TextView tv = (TextView) findViewById(R.id.textView1);
thread = new MainThread(getHolder(), this);
setFocusable(true);
}
 
private void closeAllCell(){
    for (int i=0; i<100;i++){
        BenArr[i]=0;
    }
    
}
 
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    width = w / 10f;
    height = h / 10f;
   
    super.onSizeChanged(w, h, oldw, oldh);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
 
@Override
public void surfaceCreated(SurfaceHolder holder) {
     thread.setRunning(true);
      thread.start();
}
 
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
     boolean retry = true;
      while (retry) {
       try {
        thread.join();
        retry = false;
       } catch (InterruptedException e) {
        // пытаемся снова остановить поток thread
       }
      }
}
 
@Override
public boolean onTouchEvent(MotionEvent event) {
     if (event.getAction() == MotionEvent.ACTION_DOWN) {
       selX=(int) (event.getX() / width);
       selY=(int) (event.getY() / height);
       Log.d(TAG, "Coords: x=" + (int) (event.getX() / width) + ",y=" + (int) (event.getY() / height));
       BenArr[selY*10+selX]=1;
       tv.setText("счетчик кликов"); // Здесь выдает ошибку!!!
     }
     return super.onTouchEvent(event);
    }
 
 
 
@Override
protected void onDraw(Canvas canvas) {
    
    for (int i=0; i<10;i++){
        for (int k=0; k<10; k++){
             switch (BenArr[i*10+k])
                {
                  case 0:    
                    
                     Bitmap bitmap_none = BitmapFactory.decodeResource(getResources(), R.drawable.none);
                
                      Rect source_none = new Rect(0, 0, bitmap_none.getWidth(), bitmap_none.getHeight());
                     Rect bitmapRect_none = new Rect((int) (k * width),(int) (i * height), (int) (k* width + width),(int) (i * height + height));
                     canvas.drawBitmap(bitmap_none, source_none,bitmapRect_none, null);
        
                      break;
                  case 1:
                     Bitmap bitmap_destr = BitmapFactory.decodeResource(getResources(), R.drawable.animatdestr0001);
                        
                      Rect source_destr = new Rect(0, 0, bitmap_destr.getWidth(), bitmap_destr.getHeight());
                     Rect bitmapRect_destr = new Rect((int) (k * width),(int) (i * height), (int) (k* width + width),(int) (i * height + height));
                     canvas.drawBitmap(bitmap_destr, source_destr,bitmapRect_destr, null);
                      break;
                 
                }
          
        }
    }
}
 
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru