安卓开发记账本app

这篇博客详细介绍了如何在安卓应用中开发一款记账本,包括支出与收入的管理,饼状图的动态展示,以及相机功能的集成。开发者通过计算每项数据占总和的百分比来绘制饼状图,并添加自定义动画提升用户体验。同时,文章还阐述了在Android 6.0及以上版本中如何处理相机访问权限,确保数据库的创建和图片的拍摄、裁剪、显示和读取。此外,还讨论了如何在每个子页面添加返回按键,增强了界面交互性。
摘要由CSDN通过智能技术生成

安卓记账本app

功能实现

支出与收入的增删改查,饼状图实现占比动画展示、增加拍照功能

模块介绍

系统开发技术介绍

  1. 将数据以饼状图的形式展示占比

主要思想:通过sumValue求出数据库中所有数据的总和,将每一项除以sumValue可得占比,通过

DecimalFormat decimalFormat = new DecimalFormat("0.0");

decimalFormat.format(Percentage*100) + "%";

可以将其转换成具有一位小数格式的百分比。

随后通过百分比来计算对应的角度float angle = percentage * 360;

通过Paint类可实现绘画功能,重现onDraw

绘制饼图

canvas.drawArc(rectF, currentStartAngle, data.getAngle(), true, mPaint);

因为paint需要获取x,y值,所以需要通过三角函数计算下一块扇形对应的x与y

stopX = (float) ((r + 30) * Math.cos((2 * currentStartAngle + data.getAngle()) / 2 * Math.PI / 180));

stopY = (float) ((r + 30) * Math.sin((2 * currentStartAngle + data.getAngle()) / 2 * Math.PI / 180));

改进:添加自定义动画显示饼状图,使界面更加具有可视化效果,交互性更好

创建PieChartAnimation类继承Animation

重写void applyTransformation(float interpolatedTime, Transformation t)函数

使用setDuration(ANIMATION_DURATION)方法设置动画时间为1000

  1. 相机实现访问需要额外添加权限

在6.0以上需要调用权限校验,之后在 Activity 中添加权限校验

public static void verifyStoragePermissions(Activity activity) {int permission = ActivityCompat.checkSelfPermission(activity,

​        Manifest.permission.ACCESS_FINE_LOCATION);if (permission != PackageManager.PERMISSION_GRANTED) {

​      ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,

​          REQUEST_EXTERNAL_STORAGE);}

}

同时需要在AndroidManifest.xml中添加读写权限、相机权限,还需要在application中添加android:requestLegacyExternalStorage=“true”,保证权限被允许,否则会因为版本不同造成权限无法被允许。

  1. 数据库的创建

创建了三个表,为tb_outaccount、tb_inaccount、tb_pwd,分别用来储存支出记录信息、收入记录信息和密码信息。

public void onCreate(SQLiteDatabase db) {

​    db.execSQL("create table tb_outaccount (_id integer primary key,money decimal,time varchar(10),type varchar(10),address varchar(100),mark varchar(200))");

​    db.execSQL("create table tb_inaccount (_id integer primary key,money decimal,time varchar(10),type varchar(10),handler varchar(100),mark varchar(200))");

​    db.execSQL("create table tb_pwd (password varchar(20))");

  }
  1. 图片的拍摄,裁剪,显示和读取

拍摄:先通过Environment类中的getExternalStoragePublicDirectory()方法确定文件位置,获取此次活动的ID以及收入或支出的类型作为文件的名字,使用Uri类的fromFile()方法将其转换为Uri,最后赋予Intent IMAGE_CAPTRUE的动作,

再使用putExtra(MediaStore.EXTRA_OUTPUT,Uri)将数据放入,最后以TAKE_PHOTO作为RequestCode 来StartActivitForResult启动Intent.拍摄即可.

裁剪:OnActivityResult 方式一:TAKE_PHOTO,以com.android.camera.action.CROP作为动作新建Intent,设置setDataAndType为image,以”aspectX”, ”aspectY”, ”outputX”,

”outputY”作为name加入intent,再次使用putExtra(MediaStore.EXTRA_OUTPUT,Uri)将数据放入,最后以CROP_PHOTO作为RequestCode 来StartActivitForResult启动Intent.

显示: OnActivityResult 方式二:CROP_PHOTO,使用BitmapFactory类的decodeStream()方法将刚拍摄好的imageUri解析成Bitmap对象,再将layout上的imageView设置为该Bitmap即可.

读取: 通过Environment类中的getExternalStoragePublicDirectory()方法确定之前存储的文件位置,用收入或支出的类型加数据库中存放的本次活动的ID作为文件名,用FileInputStream打开文件,使用BitmapFactory类的decodeStream()方法将流转化为Bitmap图片.

  1. 为每个子页面的左上角添加返回按键

在AndroidManifest.xml中每个activity中添加

android:parentActivityName=".MainActivity"

指向返回的界面,增强界面的交互性。

下载

demo下载:https://download.csdn.net/download/weixin_45330449/13111263

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值