2015-10-07 41 views
0

下面的代碼將圖像加載到我的應用程序中的全屏活動中。他們來自listview然後加載到details_activity,所以我打開他們到全屏活動。來自存儲器的Android清晰圖像緩存

我注意到,只有當我全屏打開它們時,它們才存儲到SD卡存儲中。那麼,有沒有人可以告訴我什麼是在返回details_activity或關閉應用程序後刪除圖像的最佳方式?

public class FullScreenActivity extends Activity { 

PhotoViewAttacher mAttacher; 
ShareActionProvider mShareActionProvider; 
private static final String TAG_ARQUIVO = "arquivo"; 
String path; 
File file; 
Intent shareIntent; 
ImageView fullImg; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_full_screen); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    fullImg = (ImageView) findViewById(R.id.fullImage); 

    Intent i = getIntent(); 
    path = i.getStringExtra(TAG_ARQUIVO); 

    Picasso.with(FullScreenActivity.this).load(path).into(fullImg); 

    mAttacher = new PhotoViewAttacher(fullImg); 

    Uri bmpUri = getLocalBitmapUri(fullImg); 

    shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.setType("image/*"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.full_screen, menu); 

    MenuItem item = menu.findItem(R.id.menu_item_share); 
    mShareActionProvider = (ShareActionProvider) item.getActionProvider(); 
    if (mShareActionProvider != null) { 
     mShareActionProvider.setShareIntent(shareIntent); 
    } 
    return true; 
} 

// Returns the URI path to the Bitmap displayed in specified ImageView 
public Uri getLocalBitmapUri(ImageView imageView) { 
    // Extract Bitmap from ImageView drawable 
    Drawable drawable = imageView.getDrawable(); 
    Bitmap bmp = null; 
    if (drawable instanceof BitmapDrawable){ 
     bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
    } else { 
     return null; 
    } 
    // Store image to default external storage directory 
    Uri bmpUri = null; 
    try { 
     File file = new File(Environment.getExternalStoragePublicDirectory( 
      Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png"); 
     file.getParentFile().mkdirs(); 
     FileOutputStream out = new FileOutputStream(file); 
     bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 
     out.close(); 
     bmpUri = Uri.fromFile(file); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return bmpUri; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
    } 
} 

編輯

我嘗試下面的代碼刪除圖像,當我按Android原生的後退按鈕,但它didn't工作:

PicassoTools.java

public class PicassoTools { 

    public static void clearCache(Picasso p) { 
    p.cache.clear(); 
    } 

} 

FullScreen.java:

@Override 
public void onBackPressed() { 
    PicassoTools.clearCache(Picasso.with(FullScreenActivity.this)); 
    super.onBackPressed(); 
} 
+0

嘗試這一個http://stackoverflow.com/questions/22251748/cahce-multiple-images-with-picasso-image-cache和這一個太http://stackoverflow.com/questions/22016382/invalidate-cache -in-picasso –

+0

@Lakhan請看編輯部分 –

回答

0

我把它改變clearCache到deleteDirectoryTree(文件):

public class FullScreenActivity extends Activity { 

PhotoViewAttacher mAttacher; 
ShareActionProvider mShareActionProvider; 
private static final String TAG_ARQUIVO = "arquivo"; 
String path; 
File file; 
Intent shareIntent; 
ImageView fullImg; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_full_screen); 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 

fullImg = (ImageView) findViewById(R.id.fullImage); 

Intent i = getIntent(); 
path = i.getStringExtra(TAG_ARQUIVO); 

Picasso.with(FullScreenActivity.this).load(path).into(fullImg); 

mAttacher = new PhotoViewAttacher(fullImg); 

Uri bmpUri = getLocalBitmapUri(fullImg); 

shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.setType("image/*"); 
shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); 

} 

@Override 
public void onBackPressed() { 
    deleteDirectoryTree(file); 
    super.onBackPressed(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
getMenuInflater().inflate(R.menu.full_screen, menu); 

MenuItem item = menu.findItem(R.id.menu_item_share); 
mShareActionProvider = (ShareActionProvider) item.getActionProvider(); 
if (mShareActionProvider != null) { 
    mShareActionProvider.setShareIntent(shareIntent); 
} 
return true; 
} 

public Uri getLocalBitmapUri(ImageView imageView) { 
Drawable drawable = imageView.getDrawable(); 
Bitmap bmp = null; 
if (drawable instanceof BitmapDrawable){ 
    bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
} else { 
    return null; 
} 

Uri bmpUri = null; 
try { 
    File file = new File(Environment.getExternalStoragePublicDirectory( 
     Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png"); 
    file.getParentFile().mkdirs(); 
    FileOutputStream out = new FileOutputStream(file); 
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 
    out.close(); 
    bmpUri = Uri.fromFile(file); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
return bmpUri; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
int id = item.getItemId(); 
if (id == R.id.action_settings) { 
    return true; 
} 
return super.onOptionsItemSelected(item); 
} 

    public static void deleteDirectoryTree(File fileOrDirectory) { 
    if (fileOrDirectory.isDirectory()) { 
     for (File child : fileOrDirectory.listFiles()) { 
      deleteDirectoryTree(child); 
     } 
    } 

    fileOrDirectory.delete(); 
}  

} 

做了一些測試,它是由現在的工作。