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

Загрузка больших изоражений - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Ошибка в коде http://www.cyberforum.ru/android-dev/thread1560352.html
Не могу найти и понять ошибку, сам только начинаю осваивать android studio: public class ScrollingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout MyLinearLayout = new LinearLayout(this); MyLinearLayout.setOrientation(LinearLayout.VERTICAL); ...
Android Создать свой "контрол" Как сделать что то типа своего контрола? Получается что то типа Custom Adapter`а для ListView Но не адаптер а View элемент ... http://www.cyberforum.ru/android-dev/thread1560334.html
Android Динамическая смена имени ресурсного файла изображения
Добрый день уважаемые форумчане! небольшой кусок кода: int z1,q1; z1 = Integer.parseInt(sensor); for (q1 = 0; q1 < 101; q1++) { if (z1 == q1) { widgetView.setImageViewResource(R.id.imageView, R.drawable.p0); }
ViewPager тормозит при изменении TextView Android
Доброго времени суток. Слайдинг ViewPager тормозит когда я посекундно обновляю TextView, TextView находится не в фрагменте ViewPager. Возможно ли это как то исправить ? И почему так происходит ? Добавлено через 31 секунду ...
Android Разделить GridLayout на равные части http://www.cyberforum.ru/android-dev/thread1560232.html
Как разделить GridLayout на 2х2, чтобы компоненты, которые лежат в ячейках имели размер 1/2 высоты и 1/2 ширины Layout, (если просто закинуть, к примеру, кнопки, то либо wrap_content - по содержимому, либо match_parent - ПОЛНЫЙ размер родителя, т.е. 2 кнопки в ряд уже не влезут в layout). Думал в коде взять размер layout и разделить на 2, но в методе OnCreate все размеры равны 0...
Android ViewPager тормозит при изменении TextView Доброго времени суток. У меня есть ViewPager.В активити где находиться ViewPager есть TextView. С помощью TimerTask и Timer я изменяю этот TextView, для этого использую функцию runOnUIThread. Но из за этого тормозит пролистывание в ViewPager, можно ли это как-то исправить ? подробнее

Показать сообщение отдельно
Russtem81
3 / 3 / 1
Регистрация: 15.10.2015
Сообщений: 45

Загрузка больших изоражений - Android

24.10.2015, 17:59. Просмотров 171. Ответов 0
Метки (Все метки)

Уточните классы и методы ч/з которые работает стандартная галерея.

Есть потребность создать собственную активность которая будет загружать изображения из ресурсов приложения, при этом необходимо чтоб изображения грузились как из галереи.

http://developer.android.com/intl/ru...ad-bitmap.html
этот вариант не подходит т.к. картинка загружается статически и нет возможности ее масштабировать без потери качества масштабируемого кадра как в галереи.
Галерея какими то методами переваривает большие разрешения и масштабирует.
Методы галереи позволяют загружать сколь угодно большие изображения в ограниченное ресурсом представление устанавливается ImageView при зумме в этом же ограниченном представлении пересчитывается Bitmap, качество картинки начинает ухудшатся когда первоисточник не может предоставить необходимое количество пикселей начинаются всяческие математически методы типа интерполяции и прочие гадости, не писать же это все с нуля.
Bertrand Meyer не просто так же задвигал свои теории.

Добавлено через 7 часов 46 минут
лучшее что нашлось это
http://www.c-sharpcorner.com/UploadF...android-using/
но не идеал, представленный пример реализует масштаб картинки, движение по картинке, но есть большой минус при выполнении операции ZOOM не подгружается новая матрица Bitmap. В чистом виде метод setImageBitmap дает OUTMemory при загрузке больших картинок, кто подскажет как это исправить.
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
public class TouchImageView extends ImageView {  
    Matrix matrix;  
    // We can be in one of these 3 states  
    static final int NONE = 0;  
    static final int DRAG = 1;  
    static final int ZOOM = 2;  
  
    int mode = NONE;  
 
    // Remember some things for zooming  
    PointF last = new PointF();  
    PointF start = new PointF();  
    float minScale = 1f;  
    float maxScale = 3f;  
    float[] m;
    int viewWidth, viewHeight;  
  
    static final int CLICK = 3;  
  
    float saveScale = 1f;  
  
    protected float origWidth, origHeight;  
  
    int oldMeasuredWidth, oldMeasuredHeight;  
 
    ScaleGestureDetector mScaleDetector;  
 
    Context context;  
 
    public TouchImageView(Context context) {  
        super(context);  
        sharedConstructing(context);  
    } 
 
    public TouchImageView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        sharedConstructing(context);  
    }  
  
    private void sharedConstructing(Context context) {  
  
        super.setClickable(true);  
  
        this.context = context;  
  
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());  
  
        matrix = new Matrix();  
  
        m = new float[9];  
  
        setImageMatrix(matrix);  
  
        setScaleType(ScaleType.MATRIX);  
 
        setOnTouchListener(new OnTouchListener() {  
 
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
  
                mScaleDetector.onTouchEvent(event);  
  
                PointF curr = new PointF(event.getX(), event.getY());  
  
                switch (event.getAction()) {  
  
                    case MotionEvent.ACTION_DOWN:  
  
                       last.set(curr);  
  
                        start.set(last);  
  
                        mode = DRAG;  
  
                        break;  
 
                    case MotionEvent.ACTION_MOVE:  
  
                        if (mode == DRAG) {  
  
                            float deltaX = curr.x - last.x;  
  
                            float deltaY = curr.y - last.y;  
  
                            float fixTransX = getFixDragTrans(deltaX, viewWidth, origWidth * saveScale);  
  
                            float fixTransY = getFixDragTrans(deltaY, viewHeight, origHeight * saveScale);  
  
                            matrix.postTranslate(fixTransX, fixTransY);  
  
                            fixTrans();  
  
                            last.set(curr.x, curr.y);  
  
                        }  
  
                        break;  
  
                    case MotionEvent.ACTION_UP:  
  
                        mode = NONE;  
  
                        int xDiff = (int) Math.abs(curr.x - start.x);  
  
                        int yDiff = (int) Math.abs(curr.y - start.y);  
  
                        if (xDiff < CLICK && yDiff < CLICK)  
  
                            performClick();  
  
                        break;  
  
                    case MotionEvent.ACTION_POINTER_UP:  
  
                        mode = NONE;  
  
                        break;  
  
                }  
  
                setImageMatrix(matrix);  
  
                invalidate();  
  
                return true; // indicate event was handled  
  
            }  
 
        });
    }  
  
    public void setMaxZoom(float x) {  
  
        maxScale = x;  
  
    }  
  
    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {  
  
        @Override  
        public boolean onScaleBegin(ScaleGestureDetector detector) {  
  
            mode = ZOOM;  
  
            return true;  
  
        }  
 
        @Override  
        public boolean onScale(ScaleGestureDetector detector) {  
  
            float mScaleFactor = detector.getScaleFactor();  
  
            float origScale = saveScale;  
  
            saveScale *= mScaleFactor;  
  
            if (saveScale > maxScale) {  
  
                saveScale = maxScale;  
  
                mScaleFactor = maxScale / origScale;  
  
            } else if (saveScale < minScale) {  
  
                saveScale = minScale;  
  
                mScaleFactor = minScale / origScale;  
  
            }  
 
            if (origWidth * saveScale <= viewWidth || origHeight * saveScale <= viewHeight)  
  
                matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2, viewHeight / 2);  
  
            else  
  
                matrix.postScale(mScaleFactor, mScaleFactor, detector.getFocusX(), detector.getFocusY());  
  
            fixTrans();  
  
            return true;  
  
        }  
  
    }  
  
    void fixTrans() {  
  
        matrix.getValues(m);  
  
        float transX = m[Matrix.MTRANS_X];  
  
        float transY = m[Matrix.MTRANS_Y];  
  
        float fixTransX = getFixTrans(transX, viewWidth, origWidth * saveScale);  
  
        float fixTransY = getFixTrans(transY, viewHeight, origHeight * saveScale);  
  
        if (fixTransX != 0 || fixTransY != 0)  
  
            matrix.postTranslate(fixTransX, fixTransY);  
  
    }  
  
   
  
    float getFixTrans(float trans, float viewSize, float contentSize) {  
  
        float minTrans, maxTrans;  
  
        if (contentSize <= viewSize) {  
  
            minTrans = 0;  
  
            maxTrans = viewSize - contentSize;  
  
        } else {  
  
            minTrans = viewSize - contentSize;  
  
            maxTrans = 0;  
  
        }  
  
        if (trans < minTrans)  
  
            return -trans + minTrans;  
  
        if (trans > maxTrans)  
  
            return -trans + maxTrans;  
  
        return 0;  
  
    }  
 
    float getFixDragTrans(float delta, float viewSize, float contentSize) {  
  
        if (contentSize <= viewSize) {  
  
            return 0;  
  
        }  
  
        return delta;  
  
    }  
  
    @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  
        viewWidth = MeasureSpec.getSize(widthMeasureSpec);  
  
        viewHeight = MeasureSpec.getSize(heightMeasureSpec);  
  
        //  
        // Rescales image on rotation  
        //  
        if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight  
  
                || viewWidth == 0 || viewHeight == 0)  
  
            return;  
  
        oldMeasuredHeight = viewHeight;  
  
        oldMeasuredWidth = viewWidth;
  
        if (saveScale == 1) {  
  
            //Fit to screen.  
  
            float scale;  
  
            Drawable drawable = getDrawable();  
  
            if (drawable == null || drawable.getIntrinsicWidth() == 0 || drawable.getIntrinsicHeight() == 0)  
  
                return;  
  
            int bmWidth = drawable.getIntrinsicWidth();  
  
            int bmHeight = drawable.getIntrinsicHeight();  
  
            Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight);  
  
            float scaleX = (float) viewWidth / (float) bmWidth;  
  
            float scaleY = (float) viewHeight / (float) bmHeight;  
  
            scale = Math.min(scaleX, scaleY);  
  
            matrix.setScale(scale, scale);  
  
            // Center the image  
  
            float redundantYSpace = (float) viewHeight - (scale * (float) bmHeight);  
  
            float redundantXSpace = (float) viewWidth - (scale * (float) bmWidth);  
  
            redundantYSpace /= (float) 2;  
  
            redundantXSpace /= (float) 2;  
  
            matrix.postTranslate(redundantXSpace, redundantYSpace);  
  
            origWidth = viewWidth - 2 * redundantXSpace;  
  
            origHeight = viewHeight - 2 * redundantYSpace;  
  
            setImageMatrix(matrix);  
  
        }  
  
        fixTrans();  
  
    }  
  
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru