android 查看图片、保存图片

配置photoview-library-1.2.2.jar 到libs

photoview-library-1.2.2.jar 下载地址  http://pan.baidu.com/s/1nviEKtj

MainActivity

 

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;import uk.co.senab.photoview.PhotoView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{private PhotoView mPhotoView;private String img;private Bitmap bitmap;/*** 默认文件保存路径*/private static final String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)? Environment.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";//保存到SD卡private static final String SAVE_REAL_PATH = SAVE_PIC_PATH + "/good/savePic";//保存的确切位置@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}@SuppressLint("HandlerLeak")private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 1) {mPhotoView.setImageBitmap(bitmap);}}};private void init() {mPhotoView = (PhotoView) findViewById(R.id.iv_photo);
//        img = getIntent().getStringExtra("image");img = "http://p1.pstatp.com/origin/9e000062f3b52ea52f4";TextView textView = (TextView)findViewById(R.id.textView1);textView.setOnClickListener(this);Log.v("lgq","图片保持。。。。。。。。"+img);new Thread(runnable).start();}Runnable runnable = new Runnable() {@Overridepublic void run() {try {bitmap = ((BitmapDrawable) loadImageFromUrl(img)).getBitmap();Message msg = new Message();msg.what = 1;handler.sendMessage(msg);} catch (IOException e) {e.printStackTrace();}}};private static Drawable loadImageFromUrl(String url) throws IOException {URL m = new URL(url);InputStream i = (InputStream) m.getContent();return Drawable.createFromStream(i, "src");}//保存方法private void saveFile(Bitmap bm, String fileName) throws IOException {String subForder = SAVE_REAL_PATH;File foder = new File(subForder);if (!foder.exists()) foder.mkdirs();File myCaptureFile = new File(subForder, fileName);Log.v("lgq","图片保持。。。。。。。。"+myCaptureFile);Log.v("lgq","图片保持。。。。。getPath。。。"+myCaptureFile.getPath());if (!myCaptureFile.exists()) myCaptureFile.createNewFile();BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);bos.flush();bos.close();
//        Toast.bottomToast("已保存在/good/savePic目录下", PhotoScanActivity.this);//发送广播通知系统Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uri uri = Uri.fromFile(myCaptureFile);intent.setData(uri);this.sendBroadcast(intent);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.textView1:try {saveFile(bitmap, System.currentTimeMillis() + ".jpg");} catch (IOException e) {e.printStackTrace();}break;default:break;}}}

添加权限

 

 

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET" />

 

 

 

activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#00050B"android:orientation="vertical"><LinearLayoutandroid:layout_height="45dp"android:layout_width="fill_parent"android:gravity="center"android:orientation="horizontal"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="保存" /></LinearLayout><uk.co.senab.photoview.PhotoViewandroid:id="@+id/iv_photo"android:layout_width="fill_parent"android:layout_height="fill_parent" /></LinearLayout>

 

改进版:https://blog.csdn.net/meixi_android/article/details/82801273

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 生成SSH Key

苹果系统一个大更新&#xff0c;更新完&#xff0c;很多东西不能用了&#xff0c;&#xff0c;&#xff0c;重新配置一下。 1、查看秘钥是否存在&#xff0c;打开终端查看是否已经存在SSH密钥 cd ~/.ssh如果没有密钥则不会有此文件夹&#xff0c;有则备份删除, 也可以直接删除…

rman 备份后恢复整个数据库文件的操作

回复(Restoring)即是从恢复操作中选择需要的备份。 恢复(Recovery)是将日志和增量备份的改变应用到数据文件&#xff0c;使得数据文件恢复到希望的SCN号或者是指定时间点上。恢复整个数据库操作 使用RESTORE DATABASE和RECOVER DATABASE命令恢复整个数据库 RMAN> STARTUP FO…

工作109:路由菜单项

/*各个路由模块的建立*/ import Home from "/views/Home/Home"; import GlobalLayout from "/layout/GlobalLayout"; import Login from "/views/login/Login";const SYSTEM_MANAGEMENT "系统管理"; const SETTLEMENT_MANAGEMENT &q…

android TextView下划线,圆角边框,数逐字显示,虚线边框, 渐变色背景框, 阴影背景框

长方形 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"rectangle"><size android:width"10dp" android:height"5dp"…

vscode 遇到的迷之bug nvm is not compatible with the npm config prefix

mac升级系统后&#xff0c;发现每次打开vscode&#xff0c;在命令栏TERMINAL中都会出现不识别npm&#xff0c;把vscode重新安装后&#xff0c;还是不行。 最后&#xff0c;在万能的git上找到了解决方法&#xff0c;之前出错的原因使因为我曾经使用brew install node安装过nod…

bsgs(Baby Steps Giant Steps)算法

BSGS算法&#xff08;Baby Steps Giant Steps算法&#xff0c;大步小步算法&#xff0c;北上广深算法&#xff0c;拔山盖世算法&#xff09; 适用问题 对于式子&#xff1a; $$x^yz(mod_p)$$ 已知x&#xff0c;z&#xff0c;p&#xff0c;p为质数&#xff1b; 求解一个最小非负…

2003服务器远程桌面连不上解决办法

一直都是用XP 连2003服务器&#xff0c;以前从未出现过问题&#xff0c;早二天突然出现提示&#xff1a;什么许可还有多少天到期&#xff0c;也没当回事&#xff0c;想想以前都这样&#xff0c;也没出过什么问题啊&#xff0c;于是就有了今天的一幕&#xff0c;打开远程桌面连接…

vue-cli webpack 打包报错:Unexpected token: punc (()

本来项目完美打包&#xff0c;后来我增加了一个插件vue-ionicons&#xff0c;打包build就是报错&#xff1a; ERROR in static/js/8.017e5cf2d2f1a552890d.js from UglifyJs Unexpected token: punc (() [./node_modules/vue-ionicons/dist/ionicons-mixin.js:7,0][static/js/…

Head First设计模式之备忘录模式

一、定义 不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态 二、结构 备忘录模式中主要有三类角色&#xff1a; 发起人角色&#xff1a;记录当前时刻的内部状态&#xff0c;负责创建和…

SVN 405错误

SVN提交时报http 错误号405&#xff1a;http 405资源被禁止 分析&#xff1a;这是因为服务器上已经存在同名的目录了&#xff0c;所以你提交时会报错。 出现 原因&#xff1a;创建目录的时候&#xff0c;多创建了一个&#xff0c;所以在Server端就删掉一个。 解决办法&#…

centos 生产 ssh-key

注意:必须在用户目录下的.ssh文件夹下生成公私密钥 1、进入目录 cd /root/.ssh2、生成ssh-key ssh-keygen -t rsa3、打开查看 vim /root/.ssh/id_rsa.pub

SVN更新时报403错误

最近开发组使用&#xff33;&#xff36;&#xff2e;更新时经常会提示403错误&#xff0c;上网查了好久&#xff0c;说是权限的问题&#xff0c;但我感觉不象&#xff0c;可以提交&#xff0c;可以迁出&#xff0c;但就是更新时报错&#xff0c;如果是权限的问题&#xff0c;那…

【模板】树状数组2

题目 基本介绍模板题目代码实现基本介绍 这篇是树状数组模板2 主要内容有&#xff1a; 1.将某区间每一个数数加上x 2.求出某一个数的和 也就是说支持区间修改 我们可以看一下 Qi.DC 的想法 他说&#xff1a;“ 我们在树状数组中可以用前 i 项的和来表示第 i 个数 那么当对 …

mpvue 从零开始 女友初成长 0

我的女友叫mpvue&#xff0c;为什么不选择原生的&#xff0c;或者wepy呢&#xff0c;因为我只喜欢mpvue。 0、首先你得保证先安装了vue-cli npm install --g vue-cli1、脚手架构建项目&#xff0c;我直接在当前项目中创建&#xff0c;一路Y就可以创建项目了。 vue init mpvu…

Android 隐藏状态栏,沉浸式状态栏,状态栏背景色,状态栏字体色,透明状态工具类

设置状态栏颜色 if (Build.VERSION.SDK_INT>21){getWindow().setStatusBarColor(getResources().getColor(R.color.mainc)); } 方法2 <color name"colorPrimary">#3F51B5</color> //取消标题 requestWindowFeature(Window.FEATURE_NO_TITLE); /…

SVN错误信息汇总

Subversion 错误信息一览表 注意&#xff1a; 不同的客户端&#xff08;命令行&#xff0c;TortoiseSVN, AnkhSVN, Subclipse等&#xff09;的出错信息可能稍有不同。 下面表格中的出错信息以 http://svn.moon.ossxp.com/svn/test 版本库做示例&#xff0c;仅供参考。 编…