Android剪切板开发记录

Startpage:主流APP的启动流程里,用户点击APP图标启动服务时,首先会跳出2~5s的欢迎界面,一方面这个界面可以用来缓冲连接网络和服务器获取数据更新服务的时间,避免APP内出现白屏现象,另一方面这个界面的UI设计中插入广告图片可以带来经济效益一举两得,在学生项目的开发中,使用Startpage来提高整个APP的可观赏性和流畅性。实现方法非常简单,在布局中设置一个全屏(无导航栏和状态栏)的页面,载入设计好的欢迎界面,在此界面上做一个定时跳转的Inent组件,时间设置为3s。
MainActivity:主菜单Button Navigation Activity,基本实现了底部导航栏的功能,我只是使用了底版,其中所有的UI布局以及布局元素都是我自己设计的。底部菜单栏的Button Icon来自阿里巴巴集团的官方矢量图标及插画库AntDesign。
关于隐藏导航栏栏:在Android Studio的模板开发中,使用的是全局导航栏即继承Manifests里的Style设置,每一个页面都会有蓝紫色的导航栏,当然导航栏的颜色是可以自定义的,但是有些页面不应该出现导航栏目,一方面让功能组件有了更多的显示区域,另一方变整个页面也变得更加好看。为了贴合主流APP的设计理念以及大众审美,在一些不需要导航栏的页面应该删除导航栏,具体参考资料来源于CSDN。但是不能将所有的导航栏都隐藏,因为在其他页面可能还会用到。所以采用的方法是在Activity文件里用代码控制是否显示导航栏,而不是在Manifests里更改APP的页面设置。
requestWindowFeature(Window.FEATURE_NO_TITLE);
getSupportActionBar().hide();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

关于圆角TextView:主流APP的文本框一般是半透明长方形圆角文本框,但是开发环境里默认的文本框都是长方形,为了使实现圆角文本框,采用Sharp设置已经编辑好的圆角文本框的.xml文件,然后在布局中引用这个.xml,实现圆角文本框,其实不管是圆角、圆形文本框、按钮等,都是通过样式设置隐藏方形的四个角来实现圆角效果。

对于类似于Startpage和Splash这样的启动页面、欢迎页面,可以用.png资源文件(图片)作为页面的背景而不需要布局,只需要通过getwindow方法设定图片来自资源:
this.getWindow().setBackgroundDrawableResource(R.drawable.a);
而一般的欢迎界面一般不是固定的,而是几张图片随机出现其中的一张,这种时候我们把所有作为启动页资源的文件建立一个数组,将他们存放进去,先声明这个变量:
int[] ImageArray = new int[]{R.drawable.b0,R.drawable.b1,R.drawable.b2};
这样在我们的图片数组中就有了b1和b2两张图片(可以添加更多),假设我们有6张图片,然后利用random方法生成一个0~6的随机数,用来控制随机出现的图片的下标
Random random = new Random();
int index = random.nextInt(7);
注意:random.nextInt(7);生成的是0~6的7个数字,不包含7
得到了随机下标,就可以利用上面说到的getwindows来设置出现随机图片作为背景:
this.getWindow().setBackgroundDrawableResource(ImageArray[index]);
关于评论功能的想法:早上实验课实现了基于SharedPreferences的信息保存与提取,我需要的评论功能是:用户可以在文本框内编辑自己的评论文本,完成之后点击提交按钮调用SharedPreferences将这些文本显示到评论区。
透明按钮:实现非常简单,只需要在xml设置里设定就可以,配合圆角按钮使用更好
android:background="@android:color/transparent"
打包运行后的一些问题:主页不能滑动换页收藏页面,图片蒙版做成亚克力样式,一来可以美化登陆界面,二来背景图片的深色区域不会影响到文本框的提示内容。主页回退会返回到登录界面,而一般是回退到桌面,所以需要结束掉loginactivity

今天完成了数据库链接登陆及注册页面的功能,顺带加上了验证码验证登录。数据库表名为user,只记录ID和Password两项数据* 下面重点说一下查询表user全部内容的方法。我们查询出来的内容,需要有个容器存放,以供使用,所以定义了一个ArrayList类的list
ArrayList list = new ArrayList();
有了容器,接下来就该从表中查询数据了,这里使用游标Cursor,这就是数据库的功底了。
如果需要用Cursor的话,第一个参数:“表名”,中间5个:null,最后是查询出来内容的排序方式:“name DESC”。
Cursor cursor = db.query(“user”,null,null,null,null,null,“name DESC”);
游标定义好了,接下来写一个while循环,让游标从表头游到表尾在游的过程中把游出来的数据存放到list容器中。
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(“name”));
String password = cursor.getString(cursor.getColumnIndex(“password”));
list.add(new User(name,password));
}
return list;

关于验证码模块,还需要做一个详细的学习笔记。对关键技术部分进行剖析。之前我一直以为验证码的来源是图片,通过对比图片的ID和用户的输入判断验证码的对错。学习之后发现其实这个模块用绘制更加简单
Canvas c = new Canvas(bp);
//Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形。Canvas绘图有三个基本要素:Canvas、绘图坐标系以及Paint。Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint。drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状,比如drawCircle方法,用来绘制圆形,需要我们传入圆心的x和y坐标,以及圆的半径。drawXXX方法中传入的画笔Paint决定了绘制的图形的一些外观,比如是绘制的图形的颜色,再比如是绘制圆面还是圆的轮廓线等。Android系统的设计吸收了很多已有系统的诸多优秀之处,比如Canvas绘图。Canvas不是Android所特有的,Flex和Silverlight都支持Canvas绘图,Canvas也是HTML5标准中的一部分,主流的现代浏览器都支持用JavaScript在Canvas上绘图,如果你用过HTML5中的Canvas,你会发现Android的Canvas的绘图API与其很相似。
因为验证码的数据都是随机生成的,将他们转换成文本再进行验证更加简单,而且节省了存储空间。实现的主要思路是通过建立一个验证码内容数组,包括数字和大小写字母
private String createCode() {
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < codeLength; i++) {
buffer.append(CHARS[random.nextInt(CHARS.length)]);
}
return buffer.toString();
}
可以根据需要去掉容易相互混淆导致认证失败的情况,例如C和G,9和q等,提高用户验证的通过率。然后每次生成验证码时随即从这个数组里抽取4个元素组合成一个4位的验证码,然后用绘图方法将它画在要显示验证码的控件里。
Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
ARGB_8888: 每个像素占8位,用来保存颜色和透明度值,一共32位,即4个字节,图片质量最高。所支持的颜色种类为:红色:28,绿色:28,蓝色:2^8,一共大约1600多万种颜色为了防止机器人验证,我们可以对这些字母和数字进行一定程度的倾斜和扭曲,并且画上干扰线和干扰点。
private void drawLine(Canvas canvas, Paint paint) {
int color = randomColor();
int startX = random.nextInt(width);
int startY = random.nextInt(height);
int stopX = random.nextInt(width);
int stopY = random.nextInt(height);
paint.setStrokeWidth(1);
paint.setColor(color);
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
随机颜色和倾斜度详见代码。
分模块工作下的引入须注意的事项:在这个项目的工作中,很多模块我都是单独建项目先实现,然后通过复制粘贴引入他们,其中Viedoplayer在引入之后会出现空指针错误,回看代码才发现setContentView的对象居然是(R.layout.activity_main),因为activity_main是存在于项目结构里的,所以这一句话不会报错,但让我好奇的是:用findById去定位页面里的viedoview居然不会报错,只是在启动之后会出现空指针错误。
异常记录:1.Fragmen中跳转的相关异常
Toast.makeText(MyFragment2.this,“正打开读书笔记”,Toast.LENGTH_SHORT).show();
intent.setClass(MyFragment2.this,Book.class);
如上的代码会出现MyFragment.this报错如下

仔细分析之后可知:要在fragment中使用Intent就不能和以前一样使用了,因为没有继承Activity或者AppCompatActivity,在new的时候如果传入this是会报错的。MyFragment是建立在MainActivity里的class,它本身并不是一个Activity,但是XXX.this是Activity的写法,所以在这些应用Activity的跳转、显示方法中需要用到getActivity()方法将当前的Fragment强制转换成MainActivity,实现跳转和显示等功能正常运行。以上两句异常语句修改为:
Toast.makeText(getActivity(),“正在打开读书笔记”,Toast.LENGTH_SHORT).show();
intent.setClass(getActivity(),Book.class);

异常记录:2.关于drawable和mipmap
Mipmap:MIP map技术帮助避免了不想要的锯齿边缘(称为锯齿状图形)在图像中出现,这种锯齿状图形可能是由于在不同分辨率下使用bitmap图像产生的。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map或者 mipmap。从百度和谷歌的说明来看mipmap确实可以加快渲染速度,而且是为了解决在不同分辨率下使用bitmap产生的问题,这就不难理解Launcher图标为什么在mipmap目录下了。在Launcher界面,图标很可能因为选中效果等动画进行放大缩小,因此可以使用mipmap来让动画更加丝滑流畅。

之所以探究上面的mipmap,是因为上图所示的报错我已经是第二次遇见了,第一次上Android实验课的时候选用户界面,大部分同学的布局背景的是使用机房电脑上老师发的素材图片,而我的背景使用的是自己电脑上的图片资料,运行时闪退debug之后报错。当时的解决方法是换了一张尺寸和大小都缩减很多的图片。这次出现问题的是在程序首页,即登陆界面完成后,加载主界面的Fragment1时出现报错:java.lang.RuntimeException:
Canvas: trying to draw too large(154054656bytes) bitmap.这句报错的详情指的是需要绘制的图片过大,在一个OnCreat周期中不能完成这些工作。Fragment1采用的是listview显示视频封面,每一个list元素中含有两张图片,但是首页显示的这些图片加起来也只有10MB不到,为什么debug信息里会有154054656bytes这么大的数据呢。我把这句报错信息在网上检索了一下,简书上的一个个人博客上对这个问题做出了解析,但是只有一句话:当你要加载的资源来自项目文件而不是网络时,它们都应该被存储在mipmap文件夹中而不是drawable文件夹。我按这个说法修改了图片资源的路径,果然成功运行。之后我又尝试用同一张图经过PS处理降低像素之后放在drawable文件夹下,也成功地加载了出来。那为什么会有这种区别呢。Mipmap在官方文档中是用来存储需要缩放的图片素材。这些疑问我打算请教羊海潮老师。
12.22展示意见:功能过于简单,对比市面上常见的小软件没有竞争能力,除观看视频外应该新增其他组件功能,完善学习记录时间对应日历功能和学习日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android开发期末大作业(项目源码,任务书,实验大报告,apk文件) 大作业的要求和内容:(包括题目选择范围、技术要求、递交时间、考核方法等) 一、实验项目名称 Android手机应用开发课程大作业 二、实验目的 1.通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用课堂上所学的Android手机应用开发知识。 2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)创造实践机会。为学生提供主动学习、积极探索与大胆创新的机会。 3.掌握Android手机应用设计的方法与技巧。 三、实验内容及要求 1、设计内容 题目、设计内容自拟,工作量适中,要求学生应用课程所学知识,采用JAVA语言和Android手机应用开发技术实现一个完整的系统。 ①完成大作业报告。 ②实现各系统功能,并完成调试运行。 2、主要技术 采用Java语言并不仅限于Java语言实现系统。 开发环境与工具:Android Studio 3.2以上版本; 操作系统:Win7/Win10或其他; 4、设计成果: 材料上交:电子文档(大作业任务书+大作业报告+源代码,电子稿请刻在光盘上)、打印稿(大作业任务书+大作业报告)。 四、成绩评定: 考核标准包括: 1、选题的工作量,难度和新颖程度 2、系统架构设计是否良好,运行过程是否报错 3、界面设计的合理性和美观程度 4、基本功能的实现 分值60 (包括布局、组件、Activity、Intent等使用) 数据存储的使用 分值10 网络功能 分值10 Service、ContentProvider或BroadCastReceiver等的使用 分值10 附加分: 图形图像处理、多媒体处理等 分值10 5、考核方式为面对面答辩,在课程的后两周内集中进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值