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

Как сохранить состояние нарисованного изображения при повороте экрана? - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Android 2.3.3 не совместим с Windows 8 http://www.cyberforum.ru/android-dev/thread1701469.html
Что делать, если мне нужна именно эта версия, а она не совместима(
Android Skype, по какому протоколу работает связь с мобильными телефонами? По какому протоколу он работает? Именно связь с сотовыми.. http://www.cyberforum.ru/android-dev/thread1701420.html
Android Если поменять ориентацию экрана или SurfaceView перекроет другой активити, то приложение завершается аварийно
Здравствуйте уважаемые программисты! Недавно начал изучать проигрывание видео под android. Получилось вывести видео на экран при помощи surfaceview и mediaplayer, но столкнулся с такой бедой, если поменять ориентацию экрана или если surfaceview перекроет другой активити, то приложение завершается аварийно. Покопался в интернете, ничего путного не нашел, только то, что нежно перегрузить функции...
Приложение вылетает с непонятной ошибкой Android
package x.com.geoquiz; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Button mTrueButton = (Button) findViewById(R.id.true_button); private Button mFalseButton = (Button) findViewById(R.id.false_button);
Android Одноклассники. Android App http://www.cyberforum.ru/android-dev/thread1701223.html
Пишу приложение с авторизацией через "Одноклассники". При входе нужно проверить старый accessToken на работоспособность. Как это сделать? В facebook, например, можно сделать запрос "https://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx".
Android Андроид студио Не могу установить сдк платформу для версии андроид 2.3.3 и више до 3 с 4 уже все нормально?? В чем может быть причина в Универе все нормально установливаеться правда там 32 система. Может ли изза того что у меня 64 бит? подробнее

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

Как сохранить состояние нарисованного изображения при повороте экрана? - Android

02.04.2016, 19:22. Просмотров 170. Ответов 0
Метки (Все метки)

Добрый вечер! Такая проблема - имеется кастомный View, на котором можно рисовать и который хостится в главной активити. При повороте экрана в горизонтальное положение весь рисунок пропадает( подскажите, пожалуйста.
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
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
public class DrawingView extends View {
 
    //drawing path
    private Path drawPath;
    //drawing and canvas paint
    private Paint drawPaint, canvasPaint;
    //initial color
    private int paintColor = 0xFF660000, paintAlpha = 255;
    //canvas
    private Canvas drawCanvas;
 
    //canvas bitmap
    private Bitmap canvasBitmap;
    //brush sizes
    private float brushSize, lastBrushSize;
    //erase flag
    private boolean erase=false;
 
 
    public DrawingView(Context context, AttributeSet attrs){
        super(context, attrs);
 
        setupDrawing();
 
    }
 
    //setup drawing
    private void setupDrawing(){
        //prepare for drawing and setup paint stroke properties
 
        brushSize = getResources().getInteger(R.integer.small_size);
        lastBrushSize = brushSize;
        drawPath = new Path();
        drawPaint = new Paint();
        drawPaint.setColor(paintColor);
        drawPaint.setAntiAlias(true);
        drawPaint.setStrokeWidth(brushSize);
        drawPaint.setStyle(Paint.Style.STROKE);
        drawPaint.setStrokeJoin(Paint.Join.ROUND);
        drawPaint.setStrokeCap(Paint.Cap.ROUND);
        canvasPaint = new Paint(Paint.DITHER_FLAG);
    }
 
    //size assigned to view
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
 
        if (canvasBitmap == null){
            canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        } else{
            Bitmap temporary = Bitmap.createScaledBitmap(canvasBitmap, w, h, true);
            canvasBitmap = temporary;
        }
        drawCanvas = new Canvas(canvasBitmap);
 
    }
 
    //draw the view - will be called after touch event
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
        canvas.drawPath(drawPath, drawPaint);
    }
 
    //register user touches as drawing action
    @Override
    public boolean onTouchEvent(MotionEvent event) {
 
        getParent().requestDisallowInterceptTouchEvent(true);
        //respond to down, move and up events
        switch (event.getAction()) {
 
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:
                performTouchEvent(event);
 
        }
        //redraw
        invalidate();
        eventList.add(MotionEvent.obtain(event));
        return true;
 
    }
 
    private void performTouchEvent(MotionEvent event) {
        float touchX = event.getX();
        float touchY = event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                drawPath.moveTo(touchX, touchY);
                break;
            case MotionEvent.ACTION_MOVE:
                drawPath.lineTo(touchX, touchY);
                break;
            case MotionEvent.ACTION_UP:
                drawPath.lineTo(touchX, touchY);
                drawCanvas.drawPath(drawPath, drawPaint);
                drawPath.reset();
                break;
        }
        invalidate();
        eventList.add(MotionEvent.obtain(event));
    }
 
    //update color
    public void setColor(String newColor){
        invalidate();
        //check whether color value or pattern name
        if(newColor.startsWith("#")){
            paintColor = Color.parseColor(newColor);
            drawPaint.setColor(paintColor);
            drawPaint.setShader(null);
        }
        else{
            //pattern
            int patternID = getResources().getIdentifier(
                    newColor, "drawable", "com.example.navigationdrawerproject");
            //decode
            Bitmap patternBMP = BitmapFactory.decodeResource(getResources(), patternID);
            //create shader
            BitmapShader patternBMPshader = new BitmapShader(patternBMP,
                    Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
            //color and shader
            drawPaint.setColor(0xFFFFFFFF);
            drawPaint.setShader(patternBMPshader);
        }
    }
 
    //set brush size
    public void setBrushSize(float newSize){
        float pixelAmount = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                newSize, getResources().getDisplayMetrics());
        brushSize=pixelAmount;
        drawPaint.setStrokeWidth(brushSize);
    }
 
    //get and set last brush size
    public void setLastBrushSize(float lastSize){
        lastBrushSize=lastSize;
    }
    public float getLastBrushSize(){
        return lastBrushSize;
    }
 
    //set erase true or false
    public void setErase(boolean isErase){
        erase=isErase;
        if(erase)  {
            drawPaint.setColor(Color.WHITE);//set the color to white
        }
        else drawPaint.setColor(paintColor); //if erase is set to false, it will use the previous color.
    }
 
    //start new drawing
    public void startNew(){
        drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
        invalidate();
    }
 
    //return current alpha
    public int getPaintAlpha(){
        return Math.round((float)paintAlpha/255*100);
    }
 
    //set alpha
    public void setPaintAlpha(int newAlpha){
        paintAlpha=Math.round((float)newAlpha/100*255);
        drawPaint.setColor(paintColor);
        drawPaint.setAlpha(paintAlpha);
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru