【发布时间】:2021-08-13 10:41:54
【问题描述】:
我有一个显示一系列图表的 ViewPager。我想将用户看到的 ViewPager 的内容转换为可以共享的位图。我已经实现了这一点,但如果系列中有多个图表,它并不总是采用当前显示的那个。通常它取最右边的一个,即索引最高的那个(例如,如果有 3 个项目,则为 2)。有时它是最左边的,我无法理解其中一个的情况。
我是一名业余开发者,我怀疑我遗漏了一些有关 Viewpager 工作原理的基本信息...
如何将当前显示的 viewpager 项目的内容转换为位图?
viewpager 设置了一个自定义的 PagerAdaptor,它通过 ViewwModel 将 Room 数据库中的数据作为 LiveData 接收,对其进行排序,并将其显示为一系列图形。 下面是一些与 ViewPager 和 Bitmap 相关的代码 sn-ps。让我知道是否需要更多信息才能使我的问题有意义。
代码:
public class ResultsGraphFragment extends Fragment {
ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
viewPager = root.findViewById(R.id.viewPager);
//do this when viewpager moved.
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
displayChevrons();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
...
private void shareImage() {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("image/*");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
i.putExtra(Intent.EXTRA_STREAM, getImageUri(getContext(), getBitmapFromView(viewPager)));
try {
startActivity(Intent.createChooser(i, getString(R.string.share_description_image_only)));
} catch (android.content.ActivityNotFoundException ex) {
ex.printStackTrace();
}
}
public static Bitmap getBitmapFromView(View view) {
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
Drawable bgDrawable =view.getBackground();
if (bgDrawable!=null)
bgDrawable.draw(canvas);
else
canvas.drawColor(Color.WHITE);
view.draw(canvas);
return returnedBitmap;
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
【问题讨论】:
-
ByteArrayOutputStream stream = new ByteArrayOutputStream();你没有使用stream。 (不是你应该这样做)。 -
getImageUri()你没有发布代码。 -
getBitmapFromView(viewPager)用于测试,将位图放入 imageview 以检查您是否得到正确的。 -
getImageUri() 代码现在包括在内。感谢您提供将位图放入 imageview 的提示,这将有助于加快我的检查速度!
-
如果您在 imageview 中获得正确的位图,请阅读以下内容:developer.android.com/reference/android/provider/…
标签: android android-viewpager android-bitmap