Android记事本app

来源:互联网 发布:禅道 专业版 源码 编辑:程序博客网 时间:2024/05/29 19:27

记事本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 );//获取文件的uriintent.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));

0 0
原创粉丝点击