Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
#1

View Pager с картинками - Программирование Android

19.12.2016, 13:10. Просмотров 527. Ответов 19
Метки нет (Все метки)

Всем привет. Есть view pager с картинками (image view) 1- как сделать так чтобы пользователь мог скачать (сохранить) понравившиюся картинку к себе на устройство.
http://www.cyberforum.ru/android-dev/thread1446006.html
2- как установить картинку в качестве обоев прямо в приложении...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2016, 13:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос View Pager с картинками (Программирование Android):

BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException
Здравствуйте! Такая проблема, у меня есть приложение, в котором drawer должен...

Отобразить содержимое rtf файла с картинками во View
Всем привет. Я гуглил вчера целый день, пришло время обращаться к разуму...

В чем разница (View view) и (View v)
Я только начинаю изучать программирование под андроид (до этого вобще...

Public void onClick(View view)
Не работает public void onClick(View view) :wall: public class MainActivity...

View вытесняет другое view из activity
После второго EditText должна располагаться кнопка. Но почему-то этот второй...

19
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
19.12.2016, 18:05 #2
1) из гугла, так сохраняют битмап
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
private void SaveIamge(Bitmap finalBitmap) {
 
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images");    
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-"+ n +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
           FileOutputStream out = new FileOutputStream(file);
           finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
           out.flush();
           out.close();
 
    } catch (Exception e) {
           e.printStackTrace();
    }
}
and add in manifest:
 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
вот так достают битмап из имеджвью
Java
1
2
Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
2) Не понял каких обоев
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
19.12.2016, 20:00  [ТС] #3
Что я не так делаю?
Из галереи загружается, а назад в галерею не сохранить..

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
import android.app.*;
import android.content.*;
import android.graphics.*;
import android.net.*;
import android.os.*;
import android.provider.MediaStore.Images.*;
import android.view.*;
import android.widget.*;
import java.io.*;
import java.util.*;
 
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
 
private Button loadButton;
private ImageView image;
private static final int REQUEST = 1;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
image = (ImageView) findViewById(R.id.imageView1);
loadButton = (Button) findViewById(R.id.button1);
 
loadButton.setOnClickListener(this);
}
 
 
 
@Override
public void onClick(View v) {
 
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 
Bitmap img = null;
 
if (requestCode == REQUEST && resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
super.onActivityResult(requestCode, resultCode, data);
}
 
    
    private void SaveIamge (Bitmap finalBitmap) {
 
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/saved_images");    
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ()) file.delete (); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
Добавлено через 45 секунд
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
19.12.2016, 20:10 #4
не вижу где сейвимадж запускается
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
19.12.2016, 22:31  [ТС] #5
И как его запустить?

Добавлено через 44 минуты
shavuz,
Простите за назойливость, но я так и не понял что нужно сделать.

Добавлено через 1 час 19 минут
Я голову уже сломал... Что делать то?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
20.12.2016, 09:28 #6
Лучший ответ Сообщение было отмечено Nikolarsen как решение

Решение

Цитата Сообщение от Nikolarsen Посмотреть сообщение
Я голову уже сломал... Что делать то?
SaveIamge - это функция, которую нужно вызвать с битмапом который вытащили из имейджвью
немного не понятно что вы хотите сделать в онактивити резальт, вижу что вы нажатием кнопки хотите выбрать картинку, и в онактивитирезальт добавить ее в имейджвью, как то это не совпадает с изначальным вопросом.
но в вашем примере есть в онактивитирезальт переменная img, для того чтоб увидеть как работает SaveIamge сделайте так в он активитирезальт в конце добавьте SaveIamge(img) это запустит сохранение . посмотрите если работает и сохраняет как нужно.
если да то продолжим разбераться что вам нужно сделать и как.
и еще вот это : super.onActivityResult(requestCode, resultCode, data); должно быть в начале функции а не в конце.
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
20.12.2016, 18:01  [ТС] #7
Спасибо за помощь. Теперь понял что к чему...
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
20.12.2016, 18:16 #8
работает?
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
20.12.2016, 22:09  [ТС] #9
shavuz,
Да спасибо вам за помощь. Я сделал кнопку для сохранения. Теперь дальше мучаюсь.
Вообще в идеале я хочу сделать для себя приложение в котором будет на загруженную картинку накладываться рамка. Как загрузить и сохранить разобрался, а вот как дальше рамку на него наложить ???
Разметка
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
<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"
    tools:context=".MainActivity">
 
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Загрузить"/>
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/button1"
        android:src="@drawable/image_1"/>
 
    <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="сохранить"
        android:id="@+id/idsave"
        android:onClick="onsave"/>
 
</RelativeLayout>
Activity
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
import android.app.*;
import android.content.*;
import android.graphics.*;
import android.graphics.drawable.*;
import android.net.*;
import android.os.*;
import android.provider.*;
import android.provider.MediaStore.Images.*;
import android.view.*;
import android.widget.*;
import java.io.*;
import java.util.*;
 
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
 
private Button loadButton;
private ImageView image;
    private static final int REQUEST = 1;
 
    
@Override
protected void onCreate(Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
    
    ActionBar actionBar = getActionBar();     actionBar.hide();
 
image = (ImageView) findViewById(R.id.imageView1);
loadButton = (Button) findViewById(R.id.button1);
 
loadButton.setOnClickListener(this);
}
 
@Override
public void onClick(View v) {
 
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
Bitmap img = null;
 
if (requestCode == REQUEST && resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
    
}
 
// кнопка сохранения
public void onsave (View v){
    Bitmap img;
    img = ((BitmapDrawable)image.getDrawable()).getBitmap();
    SaveImage(img);
}
    
    
    private void SaveImage (Bitmap finalBitmap) {
        
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/saved_images");    
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ()) file.delete (); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
            MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
Рамка типа такой
Смотри вложение
0
Миниатюры
View Pager с картинками  
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
20.12.2016, 22:14 #10
Java
1
2
3
4
5
6
7
    private Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmp1, new Matrix(), null);
        canvas.drawBitmap(bmp2, new Matrix(), null);
        return bmOverlay;
    }
вот как то так. но тут если размеры подходят заранее
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
20.12.2016, 23:21  [ТС] #11
Не так то всё просто оказывается.
А рамку где хранить,? В ресурсах?
Как сделать чтобы можно было масштабировать рамку по загруженному изображению.
Вы уж извините за кучу вопросов. Я только учусь.
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
21.12.2016, 11:41 #12
рамку да в ресурсах. нужно узнать размеры загруженного изображения и по его размерам увеличить рамку. вот так меняете размер битмапа:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
    int width = bm.getWidth();
    int height = bm.getHeight();
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    // CREATE A MATRIX FOR THE MANIPULATION
    Matrix matrix = new Matrix();
    // RESIZE THE BIT MAP
    matrix.postScale(scaleWidth, scaleHeight);
 
    // "RECREATE" THE NEW BITMAP
    Bitmap resizedBitmap = Bitmap.createBitmap(
        bm, 0, 0, width, height, matrix, false);
    bm.recycle();
    return resizedBitmap;
}
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
21.12.2016, 19:31  [ТС] #13
Пишу в onActivityResult
Java
1
2
Bitmap ram = BitmapFactory.decodeResource(getResources(),R.drawable.ramka);
    overlay (img , ram);
Не работает (
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
21.12.2016, 19:38 #14
как докажешь?


Цитата Сообщение от Nikolarsen Посмотреть сообщение
overlay (img , ram);
это так не запускается!

надо так Bitmap newBitmap = overlay (img , ram);
а потом наверно его сохранить надо. мы уже знаем как сохранять )))
вот так SaveImage(newBitmap)

еще, надо быть уверенным что твоя рамка больше чем картинка, если ты не уменьшаешь программно картинку, иначе не увидешь что что то произошло
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
21.12.2016, 21:12  [ТС] #15
И так тоже не получается (
Буду дальше пытать.
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
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
 
private Button loadButton;
private ImageView image;
    private static final int REQUEST = 1;
 
    
@Override
protected void onCreate(Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
    
    ActionBar actionBar = getActionBar();     actionBar.hide();
 
image = (ImageView) findViewById(R.id.imageView1);
    
loadButton = (Button) findViewById(R.id.button1);
 
loadButton.setOnClickListener(this);
}
 
@Override
public void onClick(View v) {
 
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
Bitmap img = null;
 
 
if (requestCode == REQUEST && resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
    
image.setImageBitmap(img);
}
    Bitmap ram = BitmapFactory.decodeResource(getResources(),R.drawable.ramka);
    Bitmap newBitmap = overlay (img,ram);
    image.setImageBitmap (newBitmap);
}
 
 
// кнопка сохранения
public void onsave (View v){
    
    Bitmap newBitmap;
    newBitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
    
    SaveImage(newBitmap);
     
}
    
    
    private void SaveImage (Bitmap finalBitmap) {
        
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/saved_images");    
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ()) file.delete (); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
            MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    private Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmp1, new Matrix(), null);
        canvas.drawBitmap(bmp2, new Matrix(), null);
        return bmOverlay;
    }
    
    public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);
 
        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = Bitmap.createBitmap(
            bm, 0, 0, width, height, matrix, false);
        bm.recycle();
        return resizedBitmap;
    }
    
}
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.12.2016, 09:20 #16
на каком моменте не получается? в какой функции не срабатывает?
поставь дебаг на 56 строке и посмотри если у тебя вооще есть ньюбитмап
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
22.12.2016, 22:05  [ТС] #17
А в overlay точно всё впорядке?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.12.2016, 22:48 #18
Цитата Сообщение от shavuz Посмотреть сообщение
на каком моменте не получается? в какой функции не срабатывает?
поставь дебаг на 56 строке и посмотри если у тебя вооще есть ньюбитмап
с этим что?
1
Nikolarsen
3 / 3 / 1
Регистрация: 17.12.2016
Сообщений: 209
22.12.2016, 23:27  [ТС] #19
С этим беда..
Для меня это абра кадабра
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
23.12.2016, 00:20 #20
так не пойдет. иди в гугл посмотри как дебагить
например тут
https://developer.android.com/studio/debug/index.html#breakPoints
c момента Work with breakpoints
0
23.12.2016, 00:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2016, 00:20
Привет! Вот еще темы с решениями:

Работа с картинками
так получаю координаты нужного квадратика, где x и y - координаты центра...

Бредятина с картинками
Засунул в drawable картинку 123.png. При запуске приложения она должна...

Красивые табы с картинками
Использую ActionBar и...

Ошибка в запуске Фрагмента с картинками
Здравствуйте, уважаемые форумчане! Столкнулся с очень интересной проблемой,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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