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

SurfaceView во фрагменте - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Decibel Sound Meter: нужно разобраться с кодом http://www.cyberforum.ru/android-dev/thread1762988.html
Искал код для определения уровня шума и напоролся на вот это: mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setOutputFile("/dev/null"); mRecorder.prepare(); mRecorder.start(); public double getAmplitude() {...
Android Разметка и вывод списком Вот пытаюсь вывести на экран списком подобие расписания, но вот сама разметка подводит. Для вывода использую RecyclerView, и когда на пример первому указываю высоту wrap_content то он из экрана вытесняет все остальные. И при компиляции остальные не отображаются. Подскажите как правильно указать параметры, что бы все объекты находились в видимой области и корректно печатались. <?xml... http://www.cyberforum.ru/android-dev/thread1762951.html
Android Разметка GridView
Как можно сделать разметку GridView, чтобы одна верхняя ячейка была по всей ширине экрана, а остальные - ниже шли обычно таблицей??Как так GridView настроить? И потом еще такой вопрос, у меня несколько категорий данных отображаются в GridView как их можно красиво разделить? Какой разделитель для этого есть?
TableLayout Android
Как мне растянуть EditText, чтобы его левый край был возле правого края TextView? Разметка <?xml version="1.0" encoding="utf-8"?> <TableLayout 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" ...
Android Узнать разрешение (dpi) картинки, загруженной в Bitmap http://www.cyberforum.ru/android-dev/thread1762668.html
Всем привет! Как получить разрешение картинки из Bitmap? Вообще возможно ли это?
Android Button вызов Народ, мне нужно сделать кнопку, которая при нажатии совершает вызов. в main.xml кнопку добавил, а в MainActivity не могу додуматься что написать( подробнее

Показать сообщение отдельно
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39

SurfaceView во фрагменте - Android

15.06.2016, 13:01. Просмотров 209. Ответов 0
Метки (Все метки)

хелп! при переносе кода из активити во фрагмент вижу только черный экран.
изменения небольшие, setContentView(v) в методе активити, изменилось на кусок кода из public View onCreateView. и изменился конструктор OurView (был просто holder = getHolder, стал surfaceView.getHolder().


есть ничем не примечательный фрагмент "public class GameFragment extends Fragment implements OnTouchListener", с простейшей разметкой FrameLayout->SurfaceView.

есть класс с конструктором:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 public class OurView extends SurfaceView implements Runnable {
 
        Thread t = null;
        SurfaceHolder holder;
        boolean isRunning = false;
 
        public OurView(Context context, SurfaceView surfaceView) {
            super(context);
            holder = surfaceView.getHolder();
        }
.........
 
        @Override
        public void run() {            
            while (isRunning) {                
                if (!holder.getSurface().isValid()) {
                    [B]// вот в этом месте все и зависает[/B]
                    continue;
                }
........
разметка заполняется вот так (возможно и неправильно...):
Java
1
2
3
4
5
6
7
8
9
10
11
12
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_game, container, false);
 
        SurfaceView surfaceView = (SurfaceView) view.findViewById(R.id.surfaceView);
 
        v = new OurView(view.getContext(), surfaceView);
        v.setOnTouchListener(this);
 
        return view;
    }
вопрос, скорее теоретический. как правильно состыковать surfaceView из layout'a с объектом класса SurfaceView?

Добавлено через 14 часов 0 минут
хм... создал все с нуля и работает... странно.

вопрос в другом теперь. там есть онТачЛистенер. код ниже... что только с ним не делал - не хочет реагировать при нажатии на сурфасевью ((

Разметка
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<FrameLayout 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"
    tools:context="layout.BlankFragment">
 
    <!-- TODO: Update blank fragment layout -->
 
    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/surfaceView_layout"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:contextClickable="true"
        android:clickable="true"
        android:longClickable="true"
        android:visibility="visible" />
 
</FrameLayout>
Код фрагмента
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package layout;
 
 
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
 
import ru.dimon4eg.jigsawpuzzle.FragmentListener;
import ru.dimon4eg.jigsawpuzzle.R;
 
public class BlankFragment extends Fragment implements View.OnTouchListener {
 
    final String LOG_TAG = "myLogs";
 
    private FragmentListener mCallback;
    private OurSurfaceView ourSurfaceView;
    private Bitmap bmAndroid;
    private float x, y;
 
    public BlankFragment() {
        // Required empty public constructor
    }
 
    protected void onAttachToContext(Context context) {
        //do what you want / cast fragment listener
        try {
            mCallback = (FragmentListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement FragmentListener");
        }
    }
 
    @TargetApi(23)
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        onAttachToContext(context);
    }
 
    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            onAttachToContext(activity);
        }
    }
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //this.ourSurfaceView.setOnTouchListener(this);
    }
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        bmAndroid = BitmapFactory.decodeResource(getResources(), R.drawable.ball, null);
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_blank, container, false);
        SurfaceView surfaceView = (SurfaceView) view.findViewById(R.id.surfaceView_layout);;
//        SurfaceView surfaceView = (
//        ourSurfaceView.setOnTouchListener( new View.OnTouchListener() {
//
//        });SurfaceView) view.findViewById(R.id.surfaceView_layout);
 
        ourSurfaceView = new OurSurfaceView(view.getContext(), surfaceView);
 
 
        return view;
    }
 
    @Override
    public void onPause() {
        super.onPause();
        ourSurfaceView.pause();
    }
 
    @Override
    public void onResume() {
        super.onResume();
        ourSurfaceView.resume();
    }
 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.d(LOG_TAG, "Положили на экран");
                x = event.getX();
                y = event.getY();
                break;
            case MotionEvent.ACTION_UP:
                Log.d(LOG_TAG, "Убрали палец с экрана");
                x = event.getX();
                y = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d(LOG_TAG, "Двигаем по экрану");
                x = event.getX();
                y = event.getY();
                break;
            case MotionEvent.ACTION_OUTSIDE:
                x = event.getX();
                y = event.getY();
                break;
        }
        return true;
    }
 
    //------------------------------------------------------------------------------------------
    //
    //  класс SurfaceView
    //
    //------------------------------------------------------------------------------------------
 
    public class OurSurfaceView extends SurfaceView implements Runnable {
 
        Thread t = null;
        SurfaceHolder holder;
        boolean isRunning = false;
 
        public OurSurfaceView(Context context) {
            super(context);
            holder = getHolder();
        }
 
        public OurSurfaceView(Context context, SurfaceView surfaceView) {
            super(context);
            holder = surfaceView.getHolder();
        }
 
        @Override
        public void run() {
 
            while (isRunning) {
                Log.d(LOG_TAG, "Вроде бы работает");
                if (!holder.getSurface().isValid()) {
                    Log.d(LOG_TAG, "Оказывается не совсем :(");
                    continue;
                }
                Canvas c = holder.lockCanvas();
                doDrawing(c);
                holder.unlockCanvasAndPost(c);
            }
        }
 
        protected void doDrawing(Canvas canvas) {
            Log.d(LOG_TAG, "Рисуем на экране");
            canvas.drawBitmap(bmAndroid,x,y,null);
        }
 
        public void pause() {
            Log.d(LOG_TAG, "Пауза");
            isRunning = false;
            while(true){
                try {
                    t.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                break;
            }
            t = null;
        }
 
        public void resume() {
            Log.d(LOG_TAG, "Изюм");
            isRunning = true;
            t = new Thread(this);
            t.start();
        }
    }
 
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru