最近接的一个私活涉及到拍照并显示出来图片的问题,但是在写代码的过程中,自己出现了一些问题:拍照了,在图库中可以查询到图片,但是就是显示不出来,debug以后发现获取的图片为null;
然后就对整个代码进行了检查跟修改。
首先是整个界面的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拍照"
android:id="@+id/bt_photo"
/>
<TextView
android:layout_width="200dip"
android:layout_height="200dip"
android:id="@+id/tv_add"
android:layout_centerInParent="true"
/>
</RelativeLayout>
流程:点击按钮调用系统拍照功能----拍照完毕,存储图片-----在TextView上显示出图片来。
废话不多说,直接进入代码的部分:
public class MainActivity extends Activity implements OnClickListener {private Button bt_add;//拍照按钮
private int i = 0;//变量变量i
public static final int TAKE_PICTURE_ORIGINAL = 8888;//请求码
private Bitmap bitmap;//bitmap对象
private File file;//文件对象
private TextView tv_add;//要显示图片的textView
@Override
protected void onCreate(Bundle savedInstanceState) { //在这里面初始化所有的控件,并设置按钮的点击事件
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_add = (Button) findViewById(R.id.bt_photo);
bt_add.setOnClickListener(this);
tv_add = (TextView) findViewById(R.id.tv_add);
}
@Override
public void onClick(View arg0) { //实现按钮的点击事件-----在点击的时候所要做得操作是调用系统拍照的功能
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File("mnt/sdcard/DCIM/Camera/" + getPhotoFileName());//以这样的路径创建一个文件
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, TAKE_PICTURE_ORIGINAL);
}
private String getPhotoFileName() { //以时间戳为基础的图片名字
// TODO Auto-generated method stub
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date) + ".jpg";
}
既然是startActivityForResult启动的 那就得重写OnActivityResult()方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (requestCode == TAKE_PICTURE_ORIGINAL) {
bitmap = loadBitmap(file.getPath());
Drawable drawable = new BitmapDrawable(bitmap);
tv_add.setBackground(drawable);
i++;
}
super.onActivityResult(requestCode, resultCode, data);
}
private Bitmap loadBitmap(String path) {//根据路径获得图片
// TODO Auto-generated method stub
bitmap = BitmapFactory.decodeFile(path,null);
return bitmap;
}