Слушатель OnClick на Viewpager запускается по неправильной ссылке

Даже после добавления System.Drawing в качестве ссылки, он все равно не может быть включен в проект.

0
задан Kunal 18 January 2019 в 06:46
поделиться

2 ответа

layout.setDrawingCacheEnabled(true);
    layout.setDrawingCacheQuality(LinearLayout.DRAWING_CACHE_QUALITY_HIGH);

использовать ViewTreeObserver, чтобы получить обратный вызов, когда его макет полностью прорисован.

    ViewTreeObserver vto = layout.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            getDrawingBitmap();
        }
    });

    public void getDrawingBitmap () {
        LinearLayout mainLayout = (LinearLayout)
                findViewById(R.id.app_parent_layout);
        Bitmap b = mainLayout.getDrawingCache();

        File file = saveBitmapAsFile(b);

        Intent resultIntent = new Intent();
        resultIntent.putExtra("FullFileName", file.getAbsolutePath());
        setResult(Activity.RESULT_OK, resultIntent);
        finish();
    }
0
ответ дан Kannan panneer selvam 18 January 2019 в 06:46
поделиться

Как @MikeM. предложено в комментарии

Ну, есть несколько разных способов сделать это. Предполагая, что articleShareBtn находится на каждой отдельной странице, возможно, самым простым будет articleShareBtn.setTag (rootView) после строки rootView = ..., затем измените свой метод на частный Bitmap takeScreenshot (View root) {root.setDrawingCacheEnabled (true); ...}, а внутри onClick () вы бы назвали его как Bitmap screenshotBitmap = takeScreenshot ((View) view.getTag ()) ;. Подписывайтесь на меня? В противном случае, вы можете сохранить карту всех просмотров страниц и использовать текущий индекс, чтобы получить правильный. При необходимости есть несколько других способов.

Я получил это работает. Мой обновленный код адаптера

public class ArticleAdapter extends PagerAdapter {

   public List<Articles> articlesListChild;
   private LayoutInflater inflater;
   Context context;
   View rootView;

   public ArticleAdapter(Context context) {
      super();
      this.context = context;
   }

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


   @Override
   public void destroyItem(View collection, int position, Object view) {
      ((ViewPager) collection).removeView((View) view);
   }

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


   @SuppressLint("ClickableViewAccessibility")
   @Override
   public Object instantiateItem(ViewGroup container, final int position) {
      inflater = LayoutInflater.from(container.getContext());
      View viewLayout = inflater.inflate(R.layout.article_single_item, null, false);
      final ImageView contentIv, imageContentIv;
      TextView contentHeadTv, contentBodyTv, sharingTextTv;
      LinearLayout articleDetailsLl;
      final LinearLayout articlesPager, articleBookmarkBtn,
      articleBookmarkedBtn, articleShareBtn;

      contentIv = (ImageView) viewLayout.findViewById(R.id.content_iv);
      contentHeadTv = (TextView) viewLayout.findViewById(R.id.content_head_tv);
      contentBodyTv = (TextView) viewLayout.findViewById(R.id.content_body_tv);
      articlesPager = (LinearLayout) viewLayout.findViewById(R.id.article_pager);

      articlesLayout = (LinearLayout) viewLayout.findViewById(R.id.articles_layout);

      rootView = viewLayout.findViewById(R.id.post_main_cv);
    articleShareBtn.setTag(rootView);


      RequestOptions requestOptions = new RequestOptions();
      requestOptions.placeholder(R.drawable.placeholder);
      articlesLayout.setVisibility(View.VISIBLE);
      Glide.with(context)
          .setDefaultRequestOptions(requestOptions)
          .load(articlesListChild.get(position).getArticleImage())
          .into(contentIv);
      toolbar.setVisibility(GONE);
      articlesPager.setVisibility(GONE);
      contentIv.setScaleType(ImageView.ScaleType.FIT_XY);
        contentHeadTv.setText(articlesListChild.get(position).getArticleHeading().trim());
        contentBodyTv.setText(articlesListChild.get(position).getArticleContent().trim());
        contentSourceTv.setText(articlesListChild.get(position).getArticleSource().trim());
      contentSourceTv.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Uri uri = Uri.parse(articlesListChild.get(position).getArticleSourceLink());
              Intent intent = new Intent(Intent.ACTION_VIEW, uri);
              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(intent);
          }
       });

       articleShareBtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Bitmap screenshotBitmap = takeScreenshot((View) view.getTag());
              saveAndShareScreenshot(screenshotBitmap);
          }
       });

       container.addView(viewLayout, 0);
       return viewLayout;

   }

   private Bitmap takeScreenshot(View root) {
       root.setDrawingCacheEnabled(true);
       Bitmap screenshotBitmap = root.getDrawingCache();
       return screenshotBitmap;
   }

   private void saveAndShareScreenshot(Bitmap screenshotBitmap) {
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
        // Save Screenshot
        File myDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "/MyApp Screenshots");
        myDir.mkdir();
        String fname = "Image-" + 1 + ".jpg";
        File file = new File(myDir, fname);
        if (file.exists()) {
            file.delete();
        }
        try {
            file.createNewFile();
            FileOutputStream out = new FileOutputStream(file);
            screenshotBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        MediaScannerConnection.scanFile(context, new String[]{file.toString()}, new String[]{file.getName()}, null);
        // Share Screenshot
        file.setReadable(true, false);
        final Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        Uri photoURI = FileProvider.getUriForFile(context, "com.xyz.abcapp.provider", file);
        String shareBody = "Share"
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Read this article");
        intent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
        intent.putExtra(Intent.EXTRA_STREAM, photoURI);
        intent.setType("image/*");
        context.startActivity(Intent.createChooser(intent,"Share Using"));
    } else {
        Toast.makeText(context, "Permissions not granted", Toast.LENGTH_SHORT).show();
    }
}
0
ответ дан Kunal 18 January 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: