摘要:Android中PopupWindow位置的确定一般通过showAsDropDown函数来实现,该函数有两个重载函数,分别定义如下: public void showAsDropDown(View anchor) { showAsDropDown(anchor, 0, 0); } public void showAsDropDown(View anchor, int xoff, int yoff) { if (isShowing() || mContentView == null) { return; ...
阅读全文
摘要:UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理。对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事件监听器;对于基于回调的事件处理而言,主要做法是重写Android组件特定的回调函数,Android大部分界面组件都提供了事件响应的回调函数,我们主要重写它们就行。一基于监听器的事件处理相比于基于回调的事件处理,这是更具“面向对象”性质的事件处理方式。在监听器模型中,主要涉及三类对象:1)事件源EventSource:产生事件的来源,通常是各种组件,如按钮,窗口等。2)事件Event:事件封装了界面
阅读全文
摘要:开源项目几乎都使用版本控制系统来对代码进行维护,著名的版本控制软件有诸如CVS、RationalClearCase、MicrosoftVisualSourceSafe、Git、Subversion、Mercurial等等,数不胜数。当然上面有的是商业软件,有的是开源软件,对于我们单纯下载代码而言,其实没有多大区别,关键要看你需要下载的开源代码它是基于何种版本控制系统的进行维护的,本文就以Subversion、Git、Mercurial为例进行说明。1)UsingSubversionSubversion是一个自由开源的版本控制系统,可以从http://subversion.apache.org/
阅读全文
摘要:本文介绍文件ViewImage.java和ViewMap.java。前者实现单张图片信息的浏览,后者实现自定义的地图,用于显示图片拍摄地点和用户当前所在地点。ViewImage实现的Activity界面如左下图,点击手机的菜单键时,弹出菜单选项界面如右下图: 上面Activity用到的布局文件view_image.xml如下:<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res..
阅读全文
摘要:在前面几篇文章中,我们或多或少了解到了ImageManager类的存在,它负责从Panoramio服务器下载搜索区域内的图片数据,同时进行解析。当然,这一切是在独立的后台线程中进行的,下载的情况通过观察者模式通告给ImageList进行显示(ImageManager是被观察对象Subject)。注意,ImageManager是一个单例类。本文涉及到的知识点有两个:JSON和WeakReference。1)JSON(www.json.org)是目前流行的网络数据交换格式,它是JavaScriptObjectNotation的缩写。JSON数据是一系列键值对的集合,相信曾做过web开发的对这个不会
阅读全文
摘要:本文继续讲解Panoramio的实现,主要介绍ImageAdapter.java和ImageList.java这两个文件,这两个文件实现了如下所示的界面,左图是数据从网络加载过程中,有图是加载完成后的效果: ImageAdapter继承自BaseAdapter类,实现图片适配器的功能,而ImageList则继承自ListActivity,用于以列表形式显示搜索到的图片信息。介绍之前,先来普及下DataSetObserver和DataSetObservable的知识。从名字可以依稀猜到,DataSetObserver实现了观察者模式中的观察者角色(Observer)。当数...
阅读全文
摘要:本文介绍程序主界面的实现,对应的文件是Panoramio.java,主界面提供给用户从地图上选择搜索区域的功能,因此,直接从MapActivity继承,并实现OnClickListener接口。这样一来,这个类的初始框架如下代码所示:import com.google.android.maps.MapActivity; import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener; public class MainActivity extends MapActivi..
阅读全文
摘要:本文分析两个类:程序中用到的数据类PanoramioItem,以及工具类BitmapUtils。1)Parcelable接口和PanoramioItem类任何类如果希望自己的实例能够写入到Parcel中或者从Parcel中恢复出来,都必须实现Parcelable接口,实现这个接口的类除了要重写接口中定义的函数,还需要定义一个名为CREATOR的静态域,而CREATOR是实现Parcelable.Creator接口的对象,说了这么多,下面看下Parcelable的代码就一目了然了:public interface Parcelable { /** * Flag for use ...
阅读全文
摘要:Panoramio是一个照片分享社群,网址是http://www.panoramio.com/,现在被google收购了。注册之后就可以上传自己的照片,这些照片上传后可以在卫星地图上进行定位,经过审核的照片将有可能出现在GoogleEarth上,网站的宗旨是以照片发掘全世界,网站的logo如下:本文将要学习的开源代码也叫Panoramio,它实现的功能就是根据用户在地图上选择的地点,从Panoramio上获取周边的照片并以ListView形式显示出来,用户可以选择某种照片进行查看。首先来看下程序启动后的主界面:在MapView中选择要查看的地点,点击Searchpanoramio按钮将切换到显
阅读全文
摘要:使用ListView过程中,如果滚动加载数据的操作比较费时,很容易在滚屏时出现屏幕卡住的现象,一个解决的办法就是不要在滚动时加载数据,而是等到滚动停止后再进行数据的加载。这同样要实现OnScrollListener接口,关于该接口的简要描述见上一篇文章,这里直接进行代码的分析:package hust.iprai.asce1885; import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
impo.
阅读全文
摘要:OnScrollListener接口是定义在AbsListView中的,而AbsListView的直接子类有GridView和ListView,非直接子类有ExpandableListView。OnScrollListener的完整路径是frameworks\base\core\java\android\widget\AbsListView.java,代码如下:/** * Interface definition for a callback to be invoked when the list or grid * has been scrolled. */
public interf...
阅读全文
摘要:本文介绍使用TelephonyManager来获取手机SIM卡的状态和移动网络的相关信息,主要使用了TelephonyManager.listen函数,这个函数源码如下:public void listen(PhoneStateListener listener, int events) { String pkgForDebug = mContext != null ? mContext.getPackageName() : "<unknown>"; try { Boolean notifyNow = (getITelephony() != null); ...
阅读全文
摘要:PolicyManager类位于framework\base\core\java\com\android\internal\policy目录中的PolicyManager.java文件中。PolicyManager主要用于创建Window类、LayoutInflater类和WindowManagerPolicy类,它扮演着简单工厂模式中的工厂类角色,而抽象产品角色由IPolicy接口实现,具体产品角色由Policy类实现。它们的关系如下图所示:从下面三个类的代码可以看出,都使用了hide注解,因此,这三个类都是不对外公开的API,只限于Framework内部使用。抽象产品类IPolicy实现如
阅读全文
摘要:初学者在尝试位于不同Java包目录下Activity之间的跳转时,经常会在运行时得到ActivityNotFoundException,下面就来看看不同包目录下Activity跳转的实现。首先,我们创建两个Activity:JumpTestActivity和JumpTestActivity2,JumpTestActivity中有个按钮,当用户按下时会跳转到JumpTestActivity2,功能很简单。首先实现JumpTestActivity的代码,它位于hust.iprai.asce1885包中:public class JumpTestActivity extends Activity {
阅读全文
摘要:手机设备振动是向用户反馈信息的一种很好的方法,特别是在游戏应用中得到了极大的发挥。要控制设备的振动,我们的应用程序需要获得许可,即在AndroidManifest.xml文件中添加如下代码:<uses-permission android:name="android.permission.VIBRATE"/>设备振动是通过Vibrator类来实现的,获取这个类实例的代码如下:String vibratorService = Context.VIBRATOR_SERVICE;Vibrator vibrator = (Vibrator) getSystemServi
阅读全文