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
- Android记事本app
- Android记事本app
- Android开发【记事本App】项目开发流程——1
- 自己写的一个简单的android记事本app
- ios记事本app
- android 记事本
- Windows 8 metro app 记事本
- Qmemo Android记事本
- Android 记事本控件
- Android记事本程序源码
- android 简易记事本
- android疑问记事本
- Android 记事本样式
- Android记事本【1】
- Android记事本【2】
- Android记事本【3】
- Android记事本【4】
- Android记事本【5】
- android APP进行混淆
- Android开发:shape和selector和layer-list的(详细说明)
- 读书笔记六
- 视频编码器:编译libx264
- 二进制的使用<bitset>
- Android记事本app
- html <iframe>自适应高度
- oracle11G listener.log位置
- 1-5 核心初始化
- 京东的笔试
- QT多线程快速排序
- Linux命令行与命令
- String数组转List,List转String数组
- lightoj1003 Drunk 、uva10305 Ordering Tasks (基于dfs的拓扑排序)