摘要:使用android提供的BitmapFactory解码一张图片时,有时会遇到该错误,即:java.lang.OutOfMemoryError: bitmap size exceeds VM budget。这往往是由于图片过大造成的。要想正常使用,一种方式是分配更少的内存空间来存储,即在载入图片的时候以牺牲图片质量为代价,将图片进行放缩,这也是不少人现在为避免以上的OOM所采用的解决方法。但是,这种方法是得不偿失的,当我们使用图片作为缩略图查看时候倒是没有说什么,但是,当需要提供图片质量的时候,该怎么办呢?java.lang.OutOfMemoryError: bitmap size exceeds VM budget着实让不少人欲哭无泪呀!前几天刚好有个需求需要载入SD卡上面的图片。
阅读全文
摘要:android提供的Tween Animation和frame animation。但是当使用frame animation时候,启动Frame Animation动画的代码anim.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。现在问题是如何才能让程序启动时自动的启动动画?可以试一下在onStart方法中,但是结果同样不能如我们所愿。这样不行,继续尝试,使用Handler试一下!代码如下:handler对象将通过post方法,将里面的Runnable对象放到UI执行队列中,UI消费这个队列,调用Runnable的run方法。这里并不生成新的线程,此时的 Runnable 是运行在UI所在的主线程中。但是这种方法也是不行!
阅读全文
摘要:前面两篇“实现篇”已经将程序后台框架基本实现了,今天将涉及程序的activity类,在这个类中,为了有一个比较好的视觉效果,将介绍一些android中动画效果,依靠animation来实现,以及简单介绍android中自定义dialog的实现;首先看一下游戏界面运行时的效果图(程序中图片使用了网上的网友的,仅当学习之用): 游戏运行时界面 用于显示游戏结果的自定义dialog显示先看看用于显示程序的activity类中的代码(这里主要是一些调用等,实现的逻辑在前面两篇文章中已经包含了)package nate.llk;//包得导入略去public class GameActivity ext.
阅读全文
摘要:文接上回,之前介绍了项目的架构,进行了功能的分析,同时进行了BoardView类及时间控制类的开发及几个几口的介绍。这次我们将完整的实现游戏棋盘的绘制与touch事件的处理,以及游戏核心算法中连接算法、hint自动帮助算法与判断是否无解算法的实现。这些代码的处理都在继承自BoardView类的GameView类中。首先在GameView类中添加实现本游戏主要算法的代码,即连接算法的代码(用于判断给定的两个位置的图标能够相连通):/** * 本游戏的核心算法,判断两个连接点是否能够连接,这里传进来的就是我们点击的两个点转化成index的值 * @param p1 * @param p2 */ .
阅读全文
摘要:在上一篇文章helloPe的android项目实战之连连看—设计篇中,我们进行了对android中连连看的项目的设计,包括功能模块的划分以及核心算法的设计。此文章接上文对android平台连连看程序进入实现阶段。在此项目中,根据上文中对于功能的分析,我们将实现以下类(下面即是工程的文件目录): 在开发中,我们遵循由下向上的方式,也就是说,我们首先开发位于最底层的类,这种类并不依赖于其他的我们需要实现的类。根据上文的分析,首先我们开发在表示层模块中的界面显示类,首先是BoardView类,在android平台下,采用继承自View类的方式,看此类的代码,代码中尽量添加了详细的注释:packag.
阅读全文
摘要:此篇为本系列文章第一篇,只为记下android小项目的是设计,实现过程。本文将首先介绍连连看项目的设计,以及涉及到的相关的内容与项目中所需算法.本系列文章记录只是为了增加android项目实战经验,将所学的知识用于相应的项目开发当中。首先介绍一下android中连连看项目的架构及所用到的技术进行简要分析,框架基本如下图所示:本程序主要包含两大模块:即(1)表示层模块;(2)后台逻辑模块;其中表示层模块可以理解为游戏的UI及一些游戏辅助效果,表示层模块中,重要的是实现游戏的布局地图,项目中实现中,游戏的布局将使用自定义View的方式,在屏幕上贴图实现。而菜单模块及选关的dialog,只是为用户.
阅读全文
摘要:当程序中需要用到画图的时候,就要选择画笔的颜色,在MFC中提供了一个CColorDialog的类,通过此类可以很方便的创建这样一个颜色对话框。其构造函数如下:CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL ); 该构造函数含有三个参数,其中clrInit:指定默认的颜色选择,默认是黑色。dwFlags:指定一组标记,用来定制颜色对话框的功能和它的外观。pParentWnd:指向颜色对话框父窗口,后者拥有者窗口的指针。我们可以使用dialog的doModal()函数创建颜色对话框。在CC
阅读全文
摘要:首先来说MFC中工具栏的创建方法,可以有两种方法创建工具栏: 第一种方式的步骤如下:(1)创建工具栏资源。这个在IDE中的资源编辑器中完成。(2)构造一个CToolBar对象。(3)调用Create()函数或者CreateEx()函数创建Windows工具栏,并把它与已经创建好的CToolBar对象关联起来。(两个Create函数是CTollBar的成员函数)。原型看看:BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, UINT nID = AFX_IDW_TOOLBAR );BOO
阅读全文
摘要:要更改应用程序的窗口的外观,我们可以在两个时候更改,一是在应用程序窗口创建之前,二是在应用程序窗口创建之后进行更改。本文将两种方式记录下来。 在窗口创建之前修改:我们之前已经知道,在应用程序窗口创建之前会调用一个叫PreCreateWindow()的函数,要想在窗口创建之前修改程序窗口的外观跟大小,就应该在CMainFrame类(SDI程序)中的PreCreateWindow()函数中进行。virtual BOOL PreCreateWindow( CREATESTRUCT& cs ); //PrecreateWindow()函数原型,参数稍后作解释。 PreCreateWindow(
阅读全文
摘要:首先我们先来了解一下MFC中的CPtrArray类,他可以说是CObject类型指针对象的集合。通过int Add( CObject* newElement );注意参数是一个指针类型)可以向集合中添加元素。首先我们定义一个CPtrArray类型的对象。CPtrArray pArray;//他是一个全局对象先设定一个举例的类类型。如:class A{public: A(int i) { a = i; } ~A(){}public: int a;};现在我们需要在某个函数中要实现将一个A类型对象数据加入到一个CPtrArray对象中。此函数func1()如下:void func1(){ //首.
阅读全文
摘要:首先,在MFC中,具有PopUp属性的菜单是不能用来做命令响应的。在MFC中: 当点击一个菜单项的时候,最先接受到菜单项消息的是CMainFrame框架类,CMainFrame框架类将会把菜单项消息交给它的子窗口View类,由View类首先进行处理;如果View类检测到没对该菜单项消息做响应,则View类把菜单项消息交由文档类Doc类进行处理;如果Doc类检测到Doc类中也没对该菜单项消息做响应,则Doc类又把该菜单项消息交还给View类,由View类再交还给CMainFrame类处理。如果CMainFrame类查看到CMainFrame类中也没对该消息做响应,则最终交给App类进行处理。所.
阅读全文
摘要:1.概念区别:对于Drawable、Bitmap、Canvas和Paint它们之间的概念不是很清楚,其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap、Canvas相关的都有所变化。首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口。 Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好
阅读全文
摘要:通过一个简单的向导程序demo的设计,初步了解了MFC中一些基本对话框编程函数的编程以及一些基本控件的使用。首先来了解一些重要的函数:获取对话框上的项目指针:GetDlgItem(),注意此函数的返回值,一般都需要进行强制类型转换。获取窗口信息:GetWindowText(),而与之对应的是更改窗口信息:SetWindowText()直接取得对指定话框上项目的信息:GetDlgItemText() 想当于GetDlgItem()和GetWindowText()合用,当然,有SetDlgItemText() 相当于GetDlgItem()和SetItemText() 合用。GetDlgItem.
阅读全文
摘要:以上是手机端简单的运行效果图通过本文只是想来简单介绍一下关于android socket编程。向上服务器端代码:package nate.PPT.control;import java.awt.AWTException;import java.awt.Robot;import java.awt.event.KeyEvent;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputSt...
阅读全文
摘要:android中listView的实现有多种方式,但是当我们利用simpleAdapter实现listView的时候,SimpleAdapter并没有提供显示一个ratingBar的功能(即上面的星星用来评分的控件)。要实现上面的功能,我们可以通过继承SimpleAdapter类重写其中一些方法来实现。下面即是此类的实现:package nate.android.Service;import java.util.List;import java.util.Map;import com.nate.wte.LocalSql.StoresInfoDB;import android.content..
阅读全文
摘要:首先区分一下窗口类、窗口类对象以及窗口要区分这些关键是知道C++窗口类对象的生命周期与窗口的生命周期不是一致的!(这里容易误解的是C++窗口类对象就是窗口!)当一个窗口销毁时,与C++窗口类对象没有关系,他们之间的纽带在于这个C++窗口类内部成员变量(如m_hWnd),该变量保存了与这个C++窗口对象相关的那个窗口的句柄。当一个窗口销毁时,会调用CWnd的DesdtroyWindow()函数,该函数销毁窗口后,与之相对应的窗口类的对象(如m_hWnd)设为NULL。另一方面,当我们析构一个C++窗口类对象时,即销毁对象时,与之相对应的窗口对象是应该销毁的,因为窗口对象与窗口之间的纽带已经断了。
阅读全文
摘要:前面已经知道,在一个windows程序中,winmain函数作为程序的入口函数,一个程序的是:设计窗口(给窗口设置相应的属性)——>注册窗口——>创建窗口——>显示并且更新窗口——>消息循环;但是当创建一个MFC程序时候,并没有看到winmain函数之类的东西,并且之前的程序框架与MFC也大有不同。现在,先来看看MFC中的程序框架以及程序运行机制吧。由于MFC是对其SDK的封装,所以程序运行逻辑方式应该是一样的。 在MFC程序中,同样还是有winmain函数参与,但是这个WinMain函数是在程序编译连接时,由链接器将该函数链接到程序的。知道WinMain的存在后,那么
阅读全文
摘要:主要将window程序的运行,一些重要的API函数的初步了解,为下一步学习MFC基础基础。将学习到的东西记记~windows应用程序与操作系统之间通过消息传递实现,操作系统将事件都封装成一个MSG的消息结构体,两者之间的交互通过消息队列完成。来看看消息中具体应有的那些信息:1 typedef struct tagMSG { // msg 2 HWND hwnd;3 UINT message;4 WPARAM wParam;5 LPARAM lParam;6 DWORD time;7 POINT pt;8 } MSG; (1)HWND(第一个参数)是一个窗口的句柄,句柄是系统资源的标识,操作系.
阅读全文
摘要:在android中gallery可以提供一个很好的显示图片的方式,实现上面的效果以及动态添加数据库或者网络上下载下来的图片资源。我们首先实现一个自定义的Gallery类。MyGallery.java 1 package nate.android.Service; 2 import android.content.Context; 3 import android.graphics.Camera; 4 import android.graphics.Matrix; 5 import android.graphics.Rect; 6 import android.util.AttributeSe.
阅读全文