android点击查看大图(长按保存图片)
16lz
2021-01-25
通常会看到点击ImageView弹出一个Dialog上面有一张大图,然后长按大图可以保存,这就好像成为了一个固定的
流程,那么,我们就来实现这一系列的功能。
1.xml文件,特别简单,只有一个ImageView:
<?xml version="1.0" encoding="utf-8"?>
2.MainActivity:
public class MainActivity extends AppCompatActivity { private ImageView imageView; private Dialog dialog; private ImageView mImageView; @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); //小图的点击事件(弹出大图) imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.show(); } }); } private void init() { imageView = (ImageView) findViewById(R.id.image); //大图所依附的dialog dialog = new Dialog(MainActivity.this, R.style.AlertDialog_AppCompat_Light_); mImageView = getImageView(); dialog.setContentView(mImageView); //大图的点击事件(点击让他消失) mImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); //大图的长按监听 mImageView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { //弹出的“保存图片”的Dialog AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setItems(new String[]{getResources().getString(R.string.save_picture)}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { saveCroppedImage(((BitmapDrawable) mImageView.getDrawable()).getBitmap()); } }); builder.show(); return true; } }); } //保存图片 private void saveCroppedImage(Bitmap bmp) { File file = new File("/sdcard/myFolder"); if (!file.exists()) file.mkdir(); file = new File("/sdcard/temp.jpg".trim()); String fileName = file.getName(); String mName = fileName.substring(0, fileName.lastIndexOf(".")); String sName = fileName.substring(fileName.lastIndexOf(".")); // /sdcard/myFolder/temp_cropped.jpg String newFilePath = "/sdcard/myFolder" + "/" + mName + "_cropped" + sName; file = new File(newFilePath); try { file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.JPEG, 50, fos); fos.flush(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //动态的ImageView private ImageView getImageView(){ ImageView iv = new ImageView(this); //宽高 iv.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); //设置Padding iv.setPadding(20,20,20,20); //imageView设置图片 InputStream is = getResources().openRawResource(R.mipmap.riven); Drawable drawable = BitmapDrawable.createFromStream(is, null); iv.setImageDrawable(drawable); return iv; }}
Demo下载
更多相关文章
- Android(安卓)分享(网址)微信,微信朋友圈,QQ,QQ空间,分享小程序
- 安卓-GestureDetector手势识别类
- Android(安卓)RecyclerView使用介绍
- Android使用WebView实现图片点击的监听
- android 保存图片到数据库
- 安卓-TimePicker
- Android动态设置android:drawableLeft|Right|Top|Bottom 并根据
- Android中ViewFlipper详解
- android上传多张图片