一、界面设计
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.cqjtu.chenhe.cameralistdemo.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的图片"
android:textSize="20sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<ListView
android:id="@+id/photoList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp">
</ListView>
</LinearLayout>
<ImageView
android:id="@+id/btn_camera"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:src="@drawable/camer" />
</LinearLayout>
二、设计对象属性与数据库表
1) 定义对象属性
public class Photo {
private int id;
private String fi1eName;private Bitmap bitmap;private String info;
}
2)定义一个SQLite数据库连接
pub1ic class DataBaseAccess extends sQLiteOpenHe1per {
public DataBaseAccess(Context context,String name, int version)i
super(context,name,nu11,version) ;
@Override
public void onCreate(SQLiteDatabase db)
System. out.println("创建photo表");String sq1="create tab1e photo(\n " +
" id integer primary key autoincrement , \n"+" name text,\n”+
” info text\n"+")";
db.execsQL(sq1);
@Override
3) 定义一个类实现数据库的增删改查PhotoDAO
public class PhotoDAO {
SQLiteDatabase sqLiteDatabase=null;
Context context;
PhotoDAO(Context context){
this.context=context;
}
public void connect(){
DataBaseAccess dba=new DataBaseAccess(context,"photoDb",1);
sqLiteDatabase=dba.getReadableDatabase();
}
public long insert(Photo photo){
connect();
ContentValues values=new ContentValues();
values.put("name",photo.getFileName());
values.put("info",photo.getInfo());
long n=sqLiteDatabase.insert("photo",null,values);
Toast.makeText(context, "插入成功"+n, Toast.LENGTH_SHORT).show();
sqLiteDatabase.close();
return n;
}
public void delete(int id){
connect();
String sql="delete from photo where id="+id;
sqLiteDatabase.execSQL(sql);
Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show();
}
public List<Photo> findPhoto(){
connect();
List<Photo> photoList=new ArrayList<>();
String sql="select * from photo";
Cursor cursor=sqLiteDatabase.rawQuery(sql,null);
while(cursor.moveToNext()){
int id=cursor.getInt(cursor.getColumnIndex("id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
String info=cursor.getString(cursor.getColumnIndex("info"));
Photo p=new Photo();
p.setId(id);
p.setFileName(name);
p.setInfo(info);
photoList.add(p);
}
sqLiteDatabase.close();
return photoList;
}
}
三、文件存储类ImageFileAccess
public class ImageFileAccess {
Context context;
ImageFileAccess(Context context){
this.context=context;
}
public void saveImageFile(String fileName,Bitmap bitmap){
try {
FileOutputStream fos=context.openFileOutput(fileName,MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
Toast.makeText(context,"保存成功",Toast.LENGTH_SHORT).show();
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public Bitmap readImageFile(String fileName){
try {
FileInputStream fis=context.openFileInput(fileName);
Bitmap bitmap= BitmapFactory.decodeStream(fis);
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
public void delFile(String fileName){
String path=context.getFilesDir().getPath();
String filePath=path+"/"+fileName;
File file=new File(filePath);
file.delete();
}
}
四、数据匹配器设计
public class PhotoAdapter extends BaseAdapter {
private List photoDates;
private Context photoContext;
PhotoAdapter(Context context, List datas) {
this.photoDates = datas;
this.photoContext = context;
}
@Override
public int getCount() {
return photoDates.size();
}
@Override
public Object getItem(int position) {
return photoDates.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View photoView = View.inflate(photoContext, R.layout.photo_layout, null);
TextView tv_name = photoView.findViewById(R.id.photoName);
TextView pic_info=photoView.findViewById(R.id.photoInfo);
ImageView imageView=photoView.findViewById(R.id.photo);
Photo s = (Photo) getItem(position);
tv_name.setText(s.getFileName());
pic_info.setText(s.getInfo());
imageView.setImageBitmap(s.getBitmap());
return photoView;
}
}
五、功能实现
public class MainActivity extends AppCompatActivity {
private ImageView btn_camera;
private List<Photo> photos=new ArrayList<Photo>();
private ListView photoList;
private PhotoAdapter photoAdapter;
private final static int REQUEST_CAMERA=200;
private PhotoDAO photoDAO=new PhotoDAO(this);
private ImageFileAccess imageFileAccess=new ImageFileAccess(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_camera= (ImageView) findViewById(R.id.btn_camera);
photoList= (ListView) findViewById(R.id.photoList);
photos=photoDAO.findPhoto();
initPhoto(photos);
photoList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Photo p= photos.get(position);
String name=p.getFileName();
long i=p.getId();
Bitmap b=imageFileAccess.readImageFile(name+i);
Intent intent=new Intent();
intent.setClass(MainActivity.this,IamgeShowActivity.class);
intent.putExtra("photo",b);
intent.putExtra("fileName",name);
intent.putExtra("fileInfo",p.getInfo());
startActivity(intent);
}
});
photoList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
final Photo p= photos.get(position);
final int i=position;
AlertDialog.Builder myDialog=new AlertDialog.Builder(MainActivity.this);
myDialog.setTitle("提示");
myDialog.setIcon(R.mipmap.ic_launcher);
myDialog.setMessage("确定删除"+p.getFileName()+"?");
myDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
imageFileAccess.delFile(p.getFileName()+p.getId());
photoDAO.delete(p.getId());
photos=photoDAO.findPhoto();
initPhoto(photos);
}
});
myDialog.setNegativeButton("取消",null);
myDialog.show();
return true;
}
});
btn_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,REQUEST_CAMERA);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data==null) return;
Bundle bundle=data.getExtras();
if(requestCode==REQUEST_CAMERA) {
final Bitmap b = (Bitmap) bundle.get("data");
View infoInputView=View.inflate(this,R.layout.mydialog,null);
final EditText name_edit=infoInputView.findViewById(R.id.pName);
final EditText info_edit=infoInputView.findViewById(R.id.pInfo);
info_edit.setHint("信息");
AlertDialog.Builder myDialog= new AlertDialog.Builder(MainActivity.this);
myDialog.setTitle("描述一下");
myDialog.setIcon(R.drawable.notes);
myDialog.setView(infoInputView);
myDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name=name_edit.getText().toString();
String info=info_edit.getText().toString();
Photo photo=new Photo();
photo.setFileName(name);
photo.setBitmap(b);
photo.setInfo(info);
long i=photoDAO.insert(photo);
if(i!=-1){
imageFileAccess.saveImageFile(name+i,b);
}
photos=photoDAO.findPhoto();
initPhoto(photos);
}
});
myDialog.setNegativeButton("取消",null);
myDialog.show();
}
}
public void initPhoto(List<Photo> pList){
List<Photo> photos=new ArrayList<>();
for(Photo p :pList){
String fileName=p.getFileName();
Bitmap b=imageFileAccess.readImageFile(fileName+p.getId());
p.setBitmap(b);
photos.add(p);
}
photoAdapter=new PhotoAdapter(MainActivity.this,photos);
photoList.setAdapter(photoAdapter);
}
}