Reputation: 181
use android image loader for your application. got all set up except for saving pictures on a flash drive. I know how to save a bitmap but how to get it do not know. please tell me how do I save a picture?
public class ImagePagerActivity extends BaseActivity implements View.OnClickListener {
private static final String STATE_POSITION = "STATE_POSITION";
DisplayImageOptions options;
Button btn;
ViewPager pager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_image_pager);
btn = (Button) findViewById(R.id.myBtn);
btn.setOnClickListener(this);
Bundle bundle = getIntent().getExtras();
assert bundle != null;
String[] imageUrls = bundle.getStringArray(Constants.Extra.IMAGES);
int pagerPosition = bundle.getInt(Constants.Extra.IMAGE_POSITION, 0);
if (savedInstanceState != null) {
pagerPosition = savedInstanceState.getInt(STATE_POSITION);
}
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(new ImagePagerAdapter(imageUrls));
pager.setCurrentItem(pagerPosition);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(STATE_POSITION, pager.getCurrentItem());
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.myBtn:
//then I need to save the current image
break;
}
}
private class ImagePagerAdapter extends PagerAdapter {
private String[] images;
private LayoutInflater inflater;
ImagePagerAdapter(String[] images) {
this.images = images;
inflater = getLayoutInflater();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
assert imageLayout != null;
ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
imageLoader.displayImage(images[position], imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show();
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
}
});
view.addView(imageLayout, 0);
return imageLayout;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
}
}
Upvotes: 0
Views: 163
Reputation: 61
/**
* @author Pavan
*/
public class UILApplication extends Application {
/** */
@Override
public void onCreate() {
super.onCreate();
/**
* This configuration tuning is custom. You can tune every option, you
* may tune some of them, or you can create default configuration by
* ImageLoaderConfiguration.createDefault(this); method.
*/
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.build();
File dir = null;
String directoryString = "demo";
/*
* File dir = new File(Environment.getExternalStorageDirectory() +
* directoryString);
*/
dir = getDir(directoryString, Activity.MODE_PRIVATE);
if (dir != null && dir.exists() && dir.isDirectory()) {
// directory exists
}
/** create new directory */
else {
boolean result = false;
if (dir != null)
result = dir.mkdir();
else {
}
}
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.threadPoolSize(3)
.threadPriority(Thread.NORM_PRIORITY - 2)
.memoryCacheExtraOptions(150, 150)
// default = device screen dimensions
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.discCacheExtraOptions(IMAGE_DIMENSIONS.MAX_IMAGE_SIZE,
IMAGE_DIMENSIONS.MAX_IMAGE_SIZE, CompressFormat.JPEG,
75)
/** Adding a directory path to cache the images */
.discCache(new UnlimitedDiscCache(dir))
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.enableLogging() // Not necessary in common
.build();
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config);
}
}
Upvotes: 0
Reputation:
To save image on SD Card:
void saveImage(Bitmap myBitmap) {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_images");
String fname = "Image.jpg";
File file = new File (myDir, fname);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
You can get bitmap in below method of Universal Image Loader:
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
saveImage(loadedImage);
}
Upvotes: 2
Reputation: 61
I think you used universal image loader,you can directly save images in universal image loader cache.
Upvotes: 1