我是android的新手,我正在制作一个可以从图库中选择并打开多个图像并可以将其作为幻灯片查看的应用程序。然后使用绘画画布在图像上绘制并记录整个屏幕。
除了将图库中的多个图像加载到我的应用程序之外,我已经设法完成了所有部分。
我可以从可绘制图像中打开图像,但是很难从图库中打开图像。
我正在使用ViewPager
和片段来打开可绘制图像,请让我知道一种从图库中打开多个图像并在我的ViewPager
中显示的方法。
页面片段类
package com.example.test2;
public class PageFragment extends Fragment {
private int imageResource;
private Bitmap bitmap;
public static PageFragment getInstance(int resourceID) {
PageFragment f = new PageFragment();
Bundle args = new Bundle();
args.putInt("image_source", resourceID);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageResource = getArguments().getInt("image_source");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_page, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView imageView = (ImageView) view.findViewById(R.id.image);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 4;
o.inDither = false;
bitmap = BitmapFactory.decodeResource(getResources(), imageResource, o);
imageView.setImageBitmap(bitmap);
}
@Override
public void onDestroy() {
super.onDestroy();
bitmap.recycle();
bitmap = null;
}
}
viewPagerAdapter类
package com.example.test2;
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private List<Integer> images;
public ViewPagerAdapter(FragmentManager fm, List<Integer> imagesList) {
super(fm);
this.images = imagesList;
}
@Override
public Fragment getItem(int position) {
return PageFragment.getInstance(images.get(position));
}
@Override
public int getCount() {
return images.size();
}
}
MainActivity
package com.example.test2;
public class MainActivity extends AppCompatActivity {
ImageButton draw;
RelativeLayout relativeLayout;
Paint paint;
View view;
Path path2;
Bitmap bitmap;
Canvas canvas;
private ArrayList<Integer> images;
private BitmapFactory.Options options;
private ViewPager viewPager;
private View btnNext, btnPrev;
private FragmentStatePagerAdapter adapter;
private LinearLayout thumbnailsContainer;
private final static Integer[] resourceIDs = new Integer[]{R.mipmap.image7,R.mipmap.image6,R.mipmap.image5
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
images = new ArrayList<>();
//find view by id
viewPager = (ViewPager) findViewById(R.id.view_pager);
thumbnailsContainer = (LinearLayout) findViewById(R.id.container);
btnNext = findViewById(R.id.next);
btnPrev = findViewById(R.id.prev);
btnPrev.setOnClickListener(onClickListener(0));
btnNext.setOnClickListener(onClickListener(1));
setImagesData();
// init viewpager adapter and attach
adapter = new ViewPagerAdapter(getSupportFragmentManager(), images);
viewPager.setAdapter(adapter);
inflateThumbnails();
relativeLayout = (RelativeLayout) findViewById(R.id.layout);
draw= findViewById(R.id.b);
draw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setTitle("");
dialog.setContentView(R.layout.menu);
dialog.show();
Button black = dialog.findViewById(R.id.Black);
Button blue = dialog.findViewById(R.id.Blue);
Button red = dialog.findViewById(R.id.Red);
black.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
color();
paint.setColor(Color.parseColor("black"));
dialog.dismiss();
}
});
blue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
color();
paint.setColor(Color.parseColor("blue"));
dialog.dismiss();
}
});
red.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
color();
paint.setColor(Color.parseColor("red"));
dialog.dismiss();
}
});
}
});
}
private View.OnClickListener onClickListener(final int i) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
if (i > 0) {
//next page
if (viewPager.getCurrentItem() < viewPager.getAdapter().getCount() - 1) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}
} else {
//previous page
if (viewPager.getCurrentItem() > 0) {
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
}
}
};
}
private void setImagesData() {
for (int i = 0; i < resourceIDs.length; i++) {
images.add(resourceIDs[i]);
}
}
private void inflateThumbnails() {
for (int i = 0; i < images.size(); i++) {
View imageLayout = getLayoutInflater().inflate(R.layout.item_image, null);
ImageView imageView = (ImageView) imageLayout.findViewById(R.id.img_thumb);
imageView.setOnClickListener(onChagePageClickListener(i));
options = new BitmapFactory.Options();
options.inSampleSize = 3;
options.inDither = false;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),images.get(i),options);
imageView.setImageBitmap(bitmap);
//set to image view
imageView.setImageBitmap(bitmap);
//add imageview
thumbnailsContainer.addView(imageLayout);
}
}
private View.OnClickListener onChagePageClickListener(final int i) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(i);
}
};
}
public void color()
{
view = new SketchSheetView(MainActivity.this);
paint = new Paint();
path2 = new Path();
relativeLayout.addView(view, new ViewGroup.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT));
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(6);
}
class SketchSheetView extends View {
public SketchSheetView(Context context) {
super(context);
bitmap = Bitmap.createBitmap(820, 480, Bitmap.Config.ARGB_4444);
canvas = new Canvas(bitmap);
this.setBackgroundColor(Color.TRANSPARENT);
}
private ArrayList<DrawingClass> DrawingClassArrayList = new ArrayList<DrawingClass>();
@Override
public boolean onTouchEvent(MotionEvent event) {
DrawingClass pathWithPaint = new DrawingClass();
canvas.drawPath(path2, paint);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
path2.moveTo(event.getX(), event.getY());
path2.lineTo(event.getX(), event.getY());
}
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
path2.lineTo(event.getX(), event.getY());
pathWithPaint.setPath(path2);
pathWithPaint.setPaint(paint);
DrawingClassArrayList.add(pathWithPaint);
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (DrawingClassArrayList.size() > 0) {
canvas.drawPath(
DrawingClassArrayList.get(DrawingClassArrayList.size() - 1).getPath(),
DrawingClassArrayList.get(DrawingClassArrayList.size() - 1).getPaint());
}
}
}
public class DrawingClass {
Path DrawingClassPath;
Paint DrawingClassPaint;
private Path getPath() {
return DrawingClassPath;
}
private void setPath(Path path) {
this.DrawingClassPath = path;
}
private Paint getPaint() {
return DrawingClassPaint;
}
private void setPaint(Paint paint) {
this.DrawingClassPaint = paint;
}
}
}
答案 0 :(得分:0)
我不确定是否有可能直接进入该画廊,因为您需要调用意图。
我建议您按照以下示例启动一种方法来检索图库中的照片:enter link description here,将所有图像保存到列表中,并像您已经做好的工作一样在viewpager中显示照片。