Галерея Gridview с Viewpager и пинч для увеличения - PullRequest
0 голосов
/ 21 ноября 2018

Я занимаюсь разработкой простого приложения для галереи.У меня 2 проблемы:

Первая проблема :

Когда я касаюсь определенного изображения в моем GridView, чтобы показать его в полноэкранном режиме (видоискатель), он всегда показываетпервое изображение в галерее GridView !!!не тот, к которому я прикоснулся !!!

Но ViewPager работает правильно.

Вторая проблема :

Я хочу увеличить ViewPager активность

Я пробовал библиотеку (chrisbanes: phtoview), но у нее есть некоторые проблемы с ViewPager

Резюме :

Я хочу свою галереюПриложение работает нормально.GridView галерея (можно масштабировать изображения)

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ViewPager slider;
    private SliderAdapter sliderAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        slider=findViewById(R.id.slider);
        sliderAdapter=new SliderAdapter(this);
        slider.setAdapter(sliderAdapter);
    }

    private class SliderAdapter extends PagerAdapter{

        private Context context;
        private LayoutInflater inflater;

        public SliderAdapter(Context context) {
            this.context = context;
        }

        int[] list_img={R.drawable.ferari,R.drawable.ferrari,R.drawable.ferrarilogoo,R.drawable.yellowferrariiii,R.drawable.models,R.drawable.applogo,R.drawable.carfront,R.drawable.california,R.drawable.laferrari

        };

        @Override
        public int getCount() {
            return list_img.length;
        }

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

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, final int position) {
            inflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
            View view=inflater.inflate(R.layout.item_slider,container,false);
            ImageView imageView=view.findViewById(R.id.img_item);
            imageView.setImageResource(list_img[position]);
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent=new Intent(context,Fullscreen.class);
                    intent.putExtra("Ferrari",position);
                    startActivity(intent);
                }
            });
            container.addView(view);
            return view;
        }

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


}

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new ViewGroup.LayoutParams(230, 250));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(3, 3, 3, 3);

        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    public Integer[] mThumbIds = {
            R.drawable.ferari, R.drawable.models,
            R.drawable.ferrarihd,
            R.drawable.ferrari,
            R.drawable.yellowferrariiii,
            R.drawable.models,
            R.drawable.home,
            R.drawable.carfront,
            R.drawable.villa,
            R.drawable.derrarii,
            R.drawable.laferrari,
            R.drawable.realestate,
            R.drawable.carfront,R.drawable.california,R.drawable.laferrari

    };






}

FullscreenviewActivity.java

public class FullScreenViewActivity extends AppCompatActivity {

    private ViewPager slider;
    private SliderAdapter sliderAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_full_screen_view);

        slider=findViewById(R.id.slider);
        sliderAdapter=new SliderAdapter(this);
        slider.setAdapter(sliderAdapter);

        slider.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(View page, float position) {
                // do transformation here
                final float normalizedposition = Math.abs(Math.abs(position) - 1);
                page.setScaleX(normalizedposition / 2 + 0.5f);
                page.setScaleY(normalizedposition / 2 + 0.5f);
                //or
                // page.setRotationY(position * -30);
            }
        });



        // get intent data
        Intent i = getIntent();



        // Selected image id
        int position = i.getExtras().getInt("id");
        ImageAdapter gridViewAdapter = new ImageAdapter(this);
        gridViewAdapter.getItemId(position);






    }

    private class SliderAdapter extends PagerAdapter {

        private Context context;
        private LayoutInflater inflater;

        public SliderAdapter(Context context) {
            this.context = context;
        }



        int[] mThumbIds={   R.drawable.ferari, R.drawable.models,
                R.drawable.ferrarihd,
                R.drawable.ferrari,
                R.drawable.yellowferrariiii,
                R.drawable.models,
                R.drawable.home,
                R.drawable.carfront,
                R.drawable.villa,
                R.drawable.derrarii,
                R.drawable.laferrari,
                R.drawable.realestate,
                R.drawable.carfront,R.drawable.california,R.drawable.laferrari

        };





        @Override
        public CharSequence getPageTitle (int position) {
            return "Ferrari Cars";
        }

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

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

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, final int position) {
            inflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
            View view=inflater.inflate(R.layout.item_slider,container,false);
            ImageView imageView=view.findViewById(R.id.img_item);
            imageView.setImageResource(mThumbIds[position]);


            container.addView(view);
            return view;
        }

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

1 Ответ

0 голосов
/ 21 ноября 2018

Во-первых, у вас есть положение изображения в FullScreenActivity, поэтому для прокрутки этого изображения можно сделать только одну вещь

slider.setCurrentItem(pos);

После

int position = i.getExtras().getInt("id");

И использовать TouchImageView для увеличения

...