从拼图游戏开始(八)_功能完善

2024-06-14 02:08
文章标签 拼图游戏 功能完善

本文主要是介绍从拼图游戏开始(八)_功能完善,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       好几天没写博客了,今天继续扯拼图游戏。话说上次(从拼图游戏开始(七)_数据模块框架实现)实现了问题数据的持久化,任意长宽比图片的自动剪裁等功能。这次要完善以下功能:

       1.添加自定义图片来源,相册,摄像头获取。
       2.使用真实的随机问题数据。
       3.原图放大缩小提示。
       4.menu菜单,以及"编辑"功能实现。

       同样的,先上程序运行效果,再具体讨论一下功能的实现细节

       一、从相册、摄像头获取图片添加问题数据。

	/**
* 调用系统摄像头进行拍照,并指定保存路径
* 
*/
public static void startCameraAndSaveImage(Activity activity,int requestCode,String filePath,String fileName) {
File f=new File(filePath + fileName + ".jpg");
Uri u=Uri.fromFile(f);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, u);
intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); 
activity.startActivityForResult(intent, requestCode);  
}
/**
* 调用系统相册
* @param activity
* @param requestCode
*/
public static void startAblum(Activity activity,int requestCode) {
Intent intent = new Intent(Intent.ACTION_PICK, null); 
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");  
activity.startActivityForResult(intent, requestCode);  
}

       上面两个方法是调用摄像头和相册的方法,从代码中的startActivtyForResult()可以看出,我们需要调用类中重写onActivityResult()方法来捕获处理返回的Intent数据。具体如下:

	@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK) {
SimpleDateFormat format;
Date date;
String str;
switch(requestCode) {
case Conf.requestcode_camera:
//相机保存的大图路径
File file = new File(ImageTool.getRootPath(MainActivity.this) + cameraFile + ".jpg");
if(file.exists()) {
//1.创建缩略图
Bitmap bitmapOriginal = BitmapFactory.decodeFile(file.toString());
Bitmap snapBitmap;
File snapImage = new File(ImageTool.getRootPath(MainActivity.this) + cameraFile + "_snap.jpg");
if(!snapImage.exists()) {
try {
snapImage.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
FileOutputStream fos_small = null;
try {
fos_small = new FileOutputStream(snapImage);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
snapBitmap = bitmapOriginal.createScaledBitmap(bitmapOriginal,120, 120, false);
snapBitmap.compress(Bitmap.CompressFormat.JPEG, 100,fos_small);
//2.入库
PuzzleDao.save(MainActivity.this
, new Puzzle(ImageTool.getRootPath(MainActivity.this) + cameraFile + ".jpg"
, ImageTool.getRootPath(MainActivity.this) + cameraFile + "_snap.jpg"
, CommTool.encodePuzzle(new PuzzleGenerator().getPuzzleData())
, false));
//3.刷新界面
list = PuzzleDao.getPuzzleList(MainActivity.this);
adapter.notifyDataSetChanged();
cameraFile = null;
}
break;
case Conf.requestcode_ablum:
//1.将得到的图片保存一份到程序文件夹,并创建缩略图
format = new SimpleDateFormat("yyyyMMddHHmmss");
date = new Date();
str = format.format(date);
if(new ImageTool(MainActivity.this).saveImageToSD(MainActivity.this,data,str)) {
//2.生成问题数据,保存到数据库
PuzzleDao.save(MainActivity.this
, new Puzzle(ImageTool.getRootPath(MainActivity.this) + str + ".jpg"
, ImageTool.getRootPath(MainActivity.this) + str + "_snap.jpg"
, CommTool.encodePuzzle(new PuzzleGenerator().getPuzzleData())
, false));
}
//3.刷新界面
list = PuzzleDao.getPuzzleList(MainActivity.this);
adapter.notifyDataSetChanged();
break;
}
}
}

      特别地:

Intent intent = new Intent(Intent.ACTION_PICK, null); 
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");  
startActivityForResult(intent, Conf.requestcode_ablum);  

      其中setDataAndType()的第一个参数可以设置成想要读取的目录,这样在弹出的相册中就会只显示该指定目录下的图片。还有就是由于本应用的需求,这里涉及到缩略图的创建和问题数据的持久化动作。总结其顺序为:生成缩略图->生成问题数据->持久化问题数据->刷新界面。

      二、提示对话框的实现
      自定义一个Dialog,其内包含一个ImageView用于显示已复原的图片。并为该ImageView注册单击事件,使单击隐藏Dialog。

	/**
* 自定义Dialog,用于显示已复原图片
* @author wly
*
*/
public class Large_ImagePopup extends Dialog {
Context context;
public Large_ImagePopup(Context context) {
super(context);
this.context = context;
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.pop_image);
Display d = ((Activity) context).getWindowManager()
.getDefaultDisplay();
int w = d.getWidth();
int h = d.getHeight();
getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
setCancelable(true);
setCanceledOnTouchOutside(true);
ImageView large = (ImageView) findViewById(R.id.popImage);
large.setImageBitmap(PuzzleTool.getPuzzleImageBitmap(context,
puzzle));
show();
//单击隐藏dialog
large.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancel();
}
});
}
}

       三、ActionBar在Android2.2上的兼容使用,用的是官方的support library,具体可以参考:http://developer.android.com/guide/topics/ui/actionbar.html

       完成工程下载(含appcompat v7和afiinal):http://download.csdn.net/detail/u011638883/6814491

       好了,虽然咱已经花了时间来做ActionBar,还自己动手做了一个logo,但显然界面还需要专门的设计优化,,笔者考虑要不要请教一下部门里的美工mm呢?

       装载请保留出处:http://blog.csdn.net/u011638883/article/details/17401219

       谢谢!!

这篇关于从拼图游戏开始(八)_功能完善的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059075

相关文章

WPF特效-拼图游戏

此文主要描述我实现碎片化的便捷过程。 步骤1:    选取参考图如下(百度图库搜的): 步骤2:    根据效果图或者模型构建贝塞尔曲线,为了方便查看效果,可以设置控制点,Console.WriteLine或直接UI上显示的方式记录最终坐标,效果图如:    上图中的红线,为两条贝塞尔曲线,左侧的位置我已经通过控制点的方式调好。 上图Gif为我调整上方第二条贝塞尔的示意。 步骤3

Andorid拼图游戏案例

功能描述: 该app实现了裁剪图片生成拼图游戏的功能,还可以自定义设置行数和列数,适合新手学习。 开发语言: java 技术框架: mvc 开发工具: AndroidStudio2.2,新手最好使用此版本搭建,不同版本修改配置比较繁琐 数据库 无 程序截图 代码在公众号:师哥帮忙 中自行下载。

从拼图游戏开始(九)_界面优化及功能完善

今天来优化一下游戏界面,因为笔者希望做出来的东西能够有人会去参考或者使用。这个版本完善了一下界面,最终效果和最初的手稿设计有所不同,因为使用了ActionBar,又改了一些细节。同时也修复了上一版中快速反复单击移动块是可能出现的错乱问题的bug。运行效果如下:           一、大图片内存溢出问题         向这种图片列表,且列表中显示的是大图的情况。通常都需要处理

从拼图游戏开始(六)_游戏主体的Android实现

好的,要开始正式编码了。说实话目前为止笔者也不知道这个东西该怎么写,只是觉得能够完成它,于是就写了。以至于这种边想边写的程序,必然会存在一些需要优化的地方,但是这里笔者也仅是抛砖引玉,不敢自称高手。        今天写的是游戏主体的实现,因为不想一上来就摆一大堆实体类、字段名,看的人头大。所以本文论述的仅仅是游戏主题的实现,暂时不考虑数据持久化时的字段等细节,而诸如字段这样的细节

基于C#开发web网页管理系统模板流程-主界面统计功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客 统计功能是管理系统很常见的功能,例如仓库管理系统要统计某时间段的出入库以整合利润情况,再例如论文管理系统要统计男女生的分数情况等等 不可否认的是其实现思路与上一篇实现的出库管理功能中的【查询】按钮的功能基本相同,都是通过编写按钮的脚本,实现select查询sql语句,然后

心链14-----项目功能完善补坑+自动跳转登录页 + 重复加入队伍问题(分布式锁) 并发请求问题解决 + 项目部署上线

心链 — 伙伴匹配系统 一、todo 1、强制登录,自动跳转到登录页 解决:axios 全局配置响应拦截、并且添加重定向 1.在myAxios里配置响应拦截 这里我们要改变history 模式的实现,在main.ts里修改 当登录成功后,重定向到个人用户页面 PS:别忘了引入route 2.修改队伍页面的加入队伍按钮为创建队伍 在TeamPage页面,修改加入队伍为创建队

SSMP整合案例第八步 前端页面的分页功能完善与维护和实现条件查询

分页 页面中有分页展示 查看组件 想用什么直接编辑 vue里面的常量数据 可以修改模型数据达到修改展示效果的能力 先在前端进入的时候加载分页数据 //钩子函数,VUE对象初始化完成后自动执行created() {//加载全部数据// this.getAll();//加载分页数据this.getPage();},methods: {//分页查询getPage() {

基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能,同样的,管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 (一)入库界面 根据时间自动生成入库单号、根据入库数量和入库单价自动生成入库总价 完成基本的入库、查询、重置功能,能够通过勾选CheckBox控件进行指定字

vue外卖二十四:功能完善:时间戳格式化filter、缓存路由组件对象、路由后退push改replace,解决多嵌套路由页面点返回多次无法一次退出到上一个页面民

一、时间戳格式化filter 评价列表页面的发布时间:1469281964000,格式化为人可看懂的时间 1)新建文件并创建一个filter实例 src/filter/index.js import Vue from 'vue'// 【1】将时间戳转日期格式的过滤器Vue.filter('date-format', (dataStr) => {var time = new Date(dat

Java小项目之:拼图游戏!

Java小项目之:拼图游戏! 今天教大家用java做出一个拼图游戏,很适合java初学者练手。 所用素材: 部分代码: package picture_mosical;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.image.BufferedImage;i