记事本app开发记录
1.SqLiteDatebase数据库的设计
先创建一个类继承SQLiteOpenHelper类,并重写构造方法和onCreate方法和onUpdate方法
* 这是数据库操作类,在这里主要创建了一个数据库notes
* 别的类可以通过实例化此类来对数据库进行操作
* notesDB=new NotesDB(this);
* SQLiteDatabase dbReader=notesDB.getReadableDatabase();
*/
public class NotesDB extends SQLiteOpenHelper {
public static final String TABLE_NAME="notes";
public static final String CONTENTS="contents";
public static final String ID="_id";
public static final String TIME="time";
public static final String PATH="path";
public static final String VIDEO="video";
public NotesDB(Context context){
super(context,"notes",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+TABLE_NAME+"("
+ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"
+CONTENTS+" TEXT NOT NULL,"+PATH+" TEXT NOT NULL,"+VIDEO+" TEXT NOT NULL,"
+TIME+" TEXT NOT NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.创建主页视图布局
主布局中主要有添加文字、图片和视频的按钮然后下面是一个listview用于显示已经存在的内容
3.创建主activity
加载主布局,为按钮添加监听事件,点击按钮跳转到AddContent类,并为Intent添加一个数据来区分点击的具体是哪个按钮;
通过读取数据库将数据加载在listview上,因为有图片和视频所以不能用系统的adapter,创建一个MyAdapter继承自BaseAdapter
为listview添加点击事件,点击后进入详情页,为该详情页创建一个SelectAct类,将列表项数据通过Intent传递
4.创建内容添加activity命名为AddContent
AddContent类根据intent传入的数据不同分别执行不同的操作(用一个switch语句来区分添加文字,图片,视频等三个不同的操作)
5.创建自适应adapter继承自BaseAdapter重写方法
难点:将拍摄的照片存储到应用下的文件夹里
mediaStorageDir = new File(this.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "MyCameraApp");
mediaFile = new File(mediaStorageDir.getPath() + File.separator+ "IMG_" + timeStamp + ".jpg");
文件存储在应用目录下的picture文件下的MyCameraApp目录下
调用相机拍照命名并存储到固定位置
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri =Uri.fromFile(mediaFile );//获取文件的uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, 1);
调用相机打开图片和视频
//为图片添加点击事件
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentImg = new Intent(Intent.ACTION_VIEW);
intentImg.setDataAndType(Uri.fromFile(new File(path)), "image/*");
startActivity(intentImg);
}
});
//为svideo添加点击事件
video.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Intent intentVideo = new Intent(Intent.ACTION_VIEW);
intentVideo.setDataAndType(Uri.parse(videopath), "video/*");
startActivity(intentVideo);
return false;
}
});
制作图片和视频缩略图
public class ThumbnailUtil {
public static Bitmap getImageThumbnail(String url, int width, int height) {
Bitmap bitmap=null;
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
bitmap=BitmapFactory.decodeFile(url,options);
options.inJustDecodeBounds=false;
int beWidth = options.outWidth / width;
int beHeight = options.outHeight / height;
int be = 1;
if (beWidth < beHeight) {
be = beWidth;
} else {
be = beHeight;
}
if (be <= 0) {
be = 1;
}
options.inSampleSize = be;
bitmap = BitmapFactory.decodeFile(url, options);
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
return bitmap;
}
/**
* 获取视频的缩略图
* @param uri
* @param width
* @param height
* @param kind
* @return bitmap
*/
public static Bitmap getVideoThumbnail(String uri,int width,int height,int kind) {
Bitmap bitmap=null;
bitmap = ThumbnailUtils.createVideoThumbnail(uri,kind);
bitmap = ThumbnailUtils.extractThumbnail(bitmap,width,height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
return bitmap;
}
}
调用方法
videoiv.setImageBitmap(ThumbnailUtil.getVideoThumbnail(urlvideo,200,200,MediaStore.Images.Thumbnails.MICRO_KIND));
imgiv.setImageBitmap(ThumbnailUtil.getImageThumbnail(url,200,200));