Android记事本app

记事本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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值