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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Nikolarsen
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
#1

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

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

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

View Pager разные фрагменты на страницах, не понимаю как? - Программирование Android
помогите догнать куда вставить код из Main'а который отображает разные фрагменты: есть два файла MainActivity public class...

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

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

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

Public void onClick(View view) - Программирование Android
Не работает public void onClick(View view) :wall: public class MainActivity extends AppCompatActivity implements View.OnClickListener...

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

19
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
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
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
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
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
19.12.2016, 20:10 #4
не вижу где сейвимадж запускается
1
Nikolarsen
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
19.12.2016, 22:31  [ТС] #5
И как его запустить?

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

Добавлено через 1 час 19 минут
Я голову уже сломал... Что делать то?
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
20.12.2016, 09:28 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nikolarsen Посмотреть сообщение
Я голову уже сломал... Что делать то?
SaveIamge - это функция, которую нужно вызвать с битмапом который вытащили из имейджвью
немного не понятно что вы хотите сделать в онактивити резальт, вижу что вы нажатием кнопки хотите выбрать картинку, и в онактивитирезальт добавить ее в имейджвью, как то это не совпадает с изначальным вопросом.
но в вашем примере есть в онактивитирезальт переменная img, для того чтоб увидеть как работает SaveIamge сделайте так в он активитирезальт в конце добавьте SaveIamge(img) это запустит сохранение . посмотрите если работает и сохраняет как нужно.
если да то продолжим разбераться что вам нужно сделать и как.
и еще вот это : super.onActivityResult(requestCode, resultCode, data); должно быть в начале функции а не в конце.
1
Nikolarsen
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
20.12.2016, 18:01  [ТС] #7
Спасибо за помощь. Теперь понял что к чему...
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
20.12.2016, 18:16 #8
работает?
1
Nikolarsen
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
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
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
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
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
20.12.2016, 23:21  [ТС] #11
Не так то всё просто оказывается.
А рамку где хранить,? В ресурсах?
Как сделать чтобы можно было масштабировать рамку по загруженному изображению.
Вы уж извините за кучу вопросов. Я только учусь.
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
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
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
21.12.2016, 19:31  [ТС] #13
Пишу в onActivityResult
Java
1
2
Bitmap ram = BitmapFactory.decodeResource(getResources(),R.drawable.ramka);
    overlay (img , ram);
Не работает (
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
21.12.2016, 19:38 #14
как докажешь?


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

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

еще, надо быть уверенным что твоя рамка больше чем картинка, если ты не уменьшаешь программно картинку, иначе не увидешь что что то произошло
1
Nikolarsen
1 / 1 / 0
Регистрация: 17.12.2016
Сообщений: 89
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
21.12.2016, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2016, 21:12
Привет! Вот еще темы с ответами:

Бредятина с картинками - Программирование Android
Засунул в drawable картинку 123.png. При запуске приложения она должна загрузиться. Но вместо этого пишет это...

Работа с картинками - Программирование Android
так получаю координаты нужного квадратика, где x и y - координаты центра public String getSelectedRect() { return...

Красивые табы с картинками - Программирование Android
Использую ActionBar и actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);Вроде как кастомизировать его сильно нельзя. Хочу...

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


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

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

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