Как сохранить изображение из ViewPager? - PullRequest
0 голосов
/ 05 апреля 2020

Моя проблема в том, что он всегда сохраняет одну и ту же фотографию, когда я нажимаю кнопку Сохранить. У меня более 10 фотографий в моем Viewpager, просто сохраняется первая, поэтому я не могу сохранить то, что хочу, хочу фотографию, хочу сохранить открытую фотографию.

Я хочу фотографию в открытом виде окно для сохранения.

пунктов. xml

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/gallery_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:id="@+id/layut"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:weightSum="30">

        <FrameLayout
            android:id="@+id/wallpaper_preview_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/movie_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </FrameLayout>

    </LinearLayout>

</RelativeLayout>

фрагмент_простой. xml

<?xml version="1.0" encoding="utf-8"?>
<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=".Fragment.SimpleFragment">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/vivi_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <Button
        android:id="@+id/bSave"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_alignParentTop="true"
        android:layout_marginStart="15dp"
        android:gravity="center"
        android:layout_marginTop="150dp"
        android:text="Save"
        android:layout_alignParentStart="true"
        android:textSize="24sp"
        android:padding="0dp" />
</RelativeLayout>

SimpleFragment. java

package com.example.duvarlar.Fragment;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.example.duvarlar.Adapters.MyAdapter;
import com.example.duvarlar.Listeneer.IFirebaseLoadDone;
import com.example.duvarlar.Models.Movie;
import com.example.duvarlar.R;
import com.example.duvarlar.Transformer.DeptPageTransformer;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * A simple {@link Fragment} subclass.
 */
public class SimpleFragment extends Fragment implements IFirebaseLoadDone, ValueEventListener {
    ViewPager viewPager;
    MyAdapter adapter;
    DatabaseReference movies;
    IFirebaseLoadDone iFirebaseLoadDone;
    Button save;
    OutputStream outputStream;

    public SimpleFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_simple, container, false);

        movies = FirebaseDatabase.getInstance().getReference("Sports");

        iFirebaseLoadDone = this;
        loadMovie();

        viewPager = (ViewPager) view.findViewById(R.id.vivi_pager);

        save = (Button) view.findViewById(R.id.bSave);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                viewPager.setDrawingCacheEnabled(true);
                Bitmap bitmap = viewPager.getDrawingCache();

                String root = Environment.getExternalStorageDirectory().toString();
                File newDir = new File(root + "/Android");//directory name of your choice
                newDir.mkdirs();
                Random gen = new Random();
                int n = 10000;
                n = gen.nextInt(n);
                String fotoname = "Photo-" + n + ".jpg";
                File file = new File(newDir, fotoname);
                if (file.exists()) file.delete();
                try {
                    FileOutputStream out = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                    out.flush();
                    out.close();
                    Toast.makeText(getActivity(), "Saved to your folder" + fotoname, Toast.LENGTH_SHORT).show();

                } catch (Exception e) {

                }

            }
        });
        return view;
    }

    private void loadMovie() {
        movies.addValueEventListener(this);
    }

    @Override
    public void onFirebaseLoadSuccess(List<Movie> movieList) {
        adapter = new MyAdapter(getContext(), movieList);
        viewPager.setAdapter(adapter);
    }

    @Override
    public void onFirebasLoadFailed(String message) {
        Toast.makeText(getContext(), "" + message, Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        List<Movie> movieList = new ArrayList<>();
        for (DataSnapshot moviesSnapShot : dataSnapshot.getChildren())
            movieList.add(moviesSnapShot.getValue(Movie.class));
        iFirebaseLoadDone.onFirebaseLoadSuccess(movieList);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        iFirebaseLoadDone.onFirebasLoadFailed(databaseError.getMessage());
    }

    @Override
    public void onDestroy() {
        movies.removeEventListener(this);
        super.onDestroy();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onStop() {
        movies.removeEventListener(this);
        super.onStop();
    }
}

MyAdapter. java

package com.example.duvarlar.Adapters;

import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import com.example.duvarlar.Models.Movie;
import com.example.duvarlar.R;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.squareup.picasso.Picasso;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

public class MyAdapter extends PagerAdapter {
    Context context;
    List<Movie> movieList;
    LayoutInflater inflater;
    OutputStream outputStream;


    public MyAdapter(Context context, List<Movie> movieList) {
        this.context = context;
        this.movieList = movieList;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return movieList.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ((ViewPager)container).removeView((View)object);
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull final ViewGroup container, final int position) {
        final View view = inflater.inflate(R.layout.items,container,false);
        final ImageView movie_image = (ImageView)view.findViewById(R.id.movie_image);

        Picasso.get()
                .load(movieList.get(position).getImage())
                .fit()
                .centerCrop()
                .into(movie_image);

        container.addView(view);
        return view;
    }
}

...