图记 2016.1.7 获取本地图片、Bitmap转image
这几天完成的内容有:
1.“添加图片”按钮
2.添加图片功能
遇到的问题:

我想要将添加图片按钮放在右下角,所以采用了相对布局,但是问题随之二来,因为将导航栏设置成了半透明,所以图片放到右下角之后,半透明的导航栏会把图片挡住,最后采取的办法是把图片高度变大,导航栏挡住多处的部分,也算是勉强实现要求了,但是对于一些没有虚拟导航栏的手机,按钮距离底部的间隔会显得略大,但是目前技术实在想不出更好的办法了

打开图片
在Activity Action里面有一个“ACTION_GET_CONTENT”字符串常量,该常量让用户选择特定类型的数据,并返回该数据的URI.我们利用该常量,然后设置类型为“image/*”,就可获得android手机内的所有image。然后再通过startActivityForResult让我们选择的image返回到Activity中去
AddPicActivity.java
package cn.lixyz.tuji; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date; import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
import cn.lixyz.tuji.Util.GetDate;
import cn.lixyz.tuji.sqlite.MySQLiteOpenHelper; /**
* 添加图片类 选择图片之后,先判断用户是否安装SD卡,如果安装,则在SD卡中新建一个cn.lixyz.tuji目录,将选择的图片复制到目录中
*
* @author LGB
*
*/ public class AddPicActivity extends Activity implements View.OnClickListener { private ImageView iv_select_img;
private EditText et_image_name, et_image_tag, et_image_remark;
private Button bt_submit;
private Bitmap bitmap;
private File sdPath;
private String fileName = "TUJIE" + new Date().getTime();
private FileOutputStream fos;
private MySQLiteOpenHelper msoh;
private SQLiteDatabase database; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_addpic); initView(); } private void initView() {
iv_select_img = (ImageView) findViewById(R.id.iv_select_img);
et_image_name = (EditText) findViewById(R.id.et_image_name);
et_image_tag = (EditText) findViewById(R.id.et_image_tag);
et_image_remark = (EditText) findViewById(R.id.et_image_remark);
bt_submit = (Button) findViewById(R.id.bt_submit);
iv_select_img.setOnClickListener(this);
bt_submit.setOnClickListener(this);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
try {
bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
long i = new Date().getTime();
copyPicToSDCard(bitmap);
Log.d("TTTT", "共耗时:" + (new Date().getTime() - i));
iv_select_img.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
Log.e("Exception", e.getMessage(), e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_select_img:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 1); break;
case R.id.bt_submit:
String picName = et_image_name.getText().toString().trim();
String picTag = et_image_tag.getText().toString().trim();
String picRemark = et_image_remark.getText().toString().trim();
msoh = new MySQLiteOpenHelper(AddPicActivity.this, "TujiData", null, 1);
database = msoh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("picName", picName);
cv.put("picTag", picTag);
cv.put("picRemark", picRemark);
cv.put("fileName", fileName);
cv.put("date", new GetDate().getDate());
database.insert("pics", null, cv);
database.close(); break;
}
} private void copyPicToSDCard(Bitmap bm) throws IOException {
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
/* 得到SD卡得路径 */
sdPath = Environment.getExternalStorageDirectory();
try {
File dir = new File(sdPath + "/cn.lixyz.TuJi"); fos = new FileOutputStream(new File(dir + "/" + fileName + ".png"));
if (!dir.exists()) {
dir.mkdir();
bm.compress(Bitmap.CompressFormat.PNG, 100, fos);
} else {
bm.compress(Bitmap.CompressFormat.PNG, 100, fos);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
fos.flush();
fos.close();
}
} else {
Toast.makeText(AddPicActivity.this, "未检测到您的SD卡,长时间使用本软件,会造成系统空间减少", Toast.LENGTH_SHORT).show();
}
}
}
图记 2016.1.7 获取本地图片、Bitmap转image的更多相关文章
- android获取本地图片并显示图片
import java.io.FileNotFoundException; import android.content.ContentResolver; import android.content ...
- Android之获取本地图片并压缩方法
这两天在做项目时,做到上传图片功能一块时,碰到两个问题,一个是如何获取所选图片的路径,一个是如何压缩图片,在查了一些资料和看了别人写的后总算折腾出来了,在此记录一下. 首先既然要选择图片,我们就先要获 ...
- IOS -- 获取本地图片和网络图片的大小size
// 获取图片的size CGSize size = [UIImage imageNamed:@"regStep2_sex"].size; 获取网络图片的尺寸: // 根据图片ur ...
- Android 获取本地图片
MainActivity.java public class RegisterActivity extends AppCompatActivity { private ImageView iv; @O ...
- Flutter 获取本地图片并剪切
安装依赖 dependencies: ... image_picker: image_cropper android\app\src\main\AndroidManifest.xml 将UCropAc ...
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...
- Android 实例解说加入本地图片和调用系统拍照图片
在项目的开发过程我们离不开图片.而有时候须要调用本地的图片,有时候须要调用拍照图片.同一时候实现拍照的方法有两种,一种是调用系统拍照功能.还有一种是自己定义拍照功能. 而本博文眼下仅仅解说第一种方法, ...
- phonegap(cordova) 自己定义插件代码篇(四)----读取本地图片
有时候确实知道本地图片地址,要获取到base64 /** * 获取本地图片,包括路径和压缩后的 base64 */ (function (cordova) { var define = cordov ...
- JS预览图像将本地图片显示到浏览器上的代码
js代码实现: 从file域获取本地图片url并将本地图片显示到浏览器上. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...
随机推荐
- 2019 GDD breaking world‘s record of π
Day 2 1.breaking pi‘s world record with google cloud [concept] memory wall: Originally theorized in ...
- Jmetal设置Solution Variables
Jmetal设置Solution Variables 觉得有用的话,欢迎一起讨论相互学习~Follow Me 首先每个solution都必须使用Problemset初始化 ProblemSet pro ...
- iOS - 获取当前时间日期星期几
//获取当前时间日期星期 - (NSString *)getCurrentTimeAndWeekDay { NSArray * arrWeek=[NSArray arrayWithObjects:@& ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之Nodejs调用bat或sh脚本
关于EasyDSS流媒体服务器 EasyDSS商用流媒体服务器解决方案是一套集流媒体点播.转码与管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP ...
- 微信小程序tabBar底部导航 不显示问题解析
2019年十月八号 转藏: 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/wy_Blo ...
- 快速修改Windows系统密码命令
因现场需要,要对30多台虚拟机进行密码修改.正常修改方式为进入控制面板--用户账户--修改密码,输入原始密码.2遍新密码(一遍用于密码确认)完成密码修改. 这种方式操作较为繁琐,我们可以直接通过命令的 ...
- cmake安装与使用
CMake(cross platform make)是一个开源的跨平台工具系列,旨在构建,测试和打包软件. 使用指定名为CMakeLists.txt的配置文件可以控制软件的构建.测试和打包等流程. 通 ...
- 开源OCR识别库-Tesseract介绍
最近在github上面看到一个开源的ocr文字识别库,感觉效果还可以,所以在这里介绍一下,这个项目的原地址在:https://github.com/tesseract-ocr/tesseract. t ...
- imposm模块安装
imposm安装 pip install imposm 报错,参考:https://imposm.org/docs/imposm/2.5.0/install.html 并安装依赖: sudo ap-g ...
- 2019 C语言测试
求一元二次方程ax² + bx + c = 0的解 a,b,c为任意整数.(10分) 编写一个口令输入程序,让用户不停输入口令,直到输对为止,假设口令为456.(8分) 输出1000-9999之间能 ...