ImageView в полноэкранном режиме в деятельности - PullRequest
0 голосов
/ 29 августа 2018

У меня есть GridView, заполненный изображениями. Когда я нажимаю на элемент GridView, он должен открыть новое действие и показать изображение на весь экран, но этого не происходит.

Я использую библиотеку Glide. Я пытался отладить, но не нашел проблемы.

Есть идеи?

Gallery.java

  gridViewGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {


                Intent intent = new Intent(AdvertisementGallery.this,FullScreenImage.class);
                intent.putExtra("image",i);

                startActivity(intent);

            }
        });

FullScreenImage.java

 viewPager.clearFocus();


        imageItems = Constants.items;


        bitmap = getIntent().getExtras().getInt("image");


        //   ImagePageAdapter imagePageAdapter = new ImagePageAdapter(this,imageItems);
        imagePageAdapter = new ImageAdapter(this,imageItems);
        viewPager.setAdapter(imagePageAdapter);

        viewPager.setCurrentItem(bitmap,false);

класс ImageAdapter расширяет PagerAdapter {

    public Context context;
    public ArrayList data = new ArrayList();

    public ImageAdapter(Context context, ArrayList data){

        this.context = context;
        this.data = data;

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

    }

    @Override
    public int getItemPosition(Object object) {
        int position = data.indexOf(object);
        return  POSITION_NONE ;

    }

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

    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View row = null;


        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.image_pager_item_list_layout, container, false);

            //  holder.imageTitle = (TextView) row.findViewById(R.id.text);
            image = (TouchImageView) row.findViewById(R.id.imgDisplay);
            row.setTag(image);
        } else {
            image = (ImageView) row.getTag();
        }

        ImageItem item = (ImageItem) data.get(position);

       Glide.with(getApplicationContext())
                .load(item.getImage())
               .into(image);

        container.addView(row);

        return row;

    }

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


    }
}

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Прежде всего, вы передаете положение изображения. вам нужно передать предмет. вместо позиции. Вы должны сделать следующие изменения следующим образом.

в Gallery.java

 gridViewGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            ImageItem item = (ImageItem) data.get(position)

            Intent intent = new Intent(AdvertisementGallery.this,FullScreenImage.class);
            //intent.putExtra("image",i);
            intent.putExtra("imagePosition",i);

            startActivity(intent);

        }
    });

Теперь загрузите изображение в FullScreenImage.java следующим образом.

imageItems = Constants.items;

int position=getIntent().getExtras().getInt("imagePosition");
ImageItem item = imageItems.get(position);
bitmap = item.getImage();

Чтобы установить в ViewPager, вы можете следовать этому коду:

imagePageAdapter = new ImageAdapter(this,imageItems);
viewPager.setAdapter(imagePageAdapter);
viewPager.setCurrentItem(position, true);

А за выпуск

Некоторое время изображение отображается, а некоторое время не отображается в окне просмотра.

Попробуйте добавить следующую строку .placeholder (new ColorDrawable (Color.WHITE)). поэтому код выглядит так:

Glide.with(getApplicationContext())
            .load(item.getImage())
            .placeholder (new ColorDrawable (Color.WHITE))
           .into(image);

И, если вы получаете проблему только в режиме выпуска apk, попробуйте это решение

0 голосов
/ 29 августа 2018

Проверьте, как отправить изображение из одного занятия в другое занятие с помощью намерения. В вашем коде то, что вы отправляете, не является изображением, которое является позицией. Как вы получили позицию в растровом изображении? это не так. извините за мой английский.

отметка эта ссылка

сначала преобразуйте изображение в растровое изображение, затем передайте растровое изображение в другое действие и получите его.

...