??xml version="1.0" encoding="utf-8" standalone="yes"?>
standard
singleTop
singleTask
singleInstance
可以Ҏ实际的需求ؓActivity讄对应的启动模式,从而可以避免创建大量重复的Activity{问题?br />
讄Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签讄android:launchMode属性,例如Q?br />
但如果很不幸的,你做不到不让你的E序吃CPUQ你只好用SurfaceView来强制刷新surface了,不然pȝ?a >UIq程很可能抢不过你那些吃CPU的线E?/span>
当然其实不止q两U方法来hSurface的,q两U只是纯Java应用比较常见的方法?/p>
SurfaceView和View最本质的区别在于,surfaceView是在一个新L单独U程中可以重新绘制画面而View必须在UI的主U程中更新画面?/p>
那么在UI的主U程中更新画?可能会引发问题,比如你更新画面的旉q长Q那么你的主UIU程会被你正在画的函数阻塞。那么将无法响应按键Q触屏等消息?/p>
当用surfaceView ׃是在新的U程中更新画面所以不会阻塞你的UIȝE。但q也带来了另外一个问题,是事g同步。比如你触屏了一下,你需要surfaceView?thread处理Q一般就需要有一个event queue的设计来保存touch eventQ这会稍E复杂一点,因ؓ涉及到线E同步?/p>
所以基于以上,Ҏ游戏特点Q一般分成两cR?/p>
1 被动更新画面的。比如棋c,q种用view好了。因为画面的更新是依赖于 onTouch 来更斎ͼ可以直接使用 invalidate?因ؓq种情况下,q一ơTouch和下一ơ的Touch需要的旉比较长些Q不会生媄响?/p>
2 d更新。比如一个h在一直跑动。这需要一个单独的thread不停的重lh的状态,避免dmain UI thread。所以显然view不合适,需要surfaceView来控制?/p>
1.背景自适应且不q问题的存?/strong> 2.9.PNG格式?/strong> 3. 使用Draw9Patch.jar制作9.PNG囄之定义拉伸区域?/strong> 然后点击File,导出为content.9.png?br /> W三步:在layout文g中用制作的 .9.PNG囄. 我们把content.9.png文g拯?res/drawable文g夹下Q打开/res/layout目录下的main.xmlQ申明如下: 如图Q?br /> 如图Q?br /> 可以看出Q边框非常的清晰。下图是未?9.PNG的对比图Q而且也不是我们要的效果: 4.使用Draw9Patch.jar制作9.PNG囄之定义内容区域?/strong> 5.制作.9.PNG的高U技巧?/strong> 6.SDK中如何处?.PNG囄?/strong> NinePatch验成功则调用本地ҎQ绘制出最l的囄Q?/p> 7.androidpȝ中大量应用了9.PNG囄?/strong>
制作自适应背景囄是UI开发的一个广泛问题,也是界面设计师望解决的问题Q我怿我们彼此都深有体会?br /> 比如,列表的背景图一定,但是列表的高度随着列表数据会发生变化Q标题栏的背景,无论横屏q是竖屏Q高分L率还是低分L率,都能自动填充满,而且不失真等{背景问题?br /> Ҏ以往的经验,我们一般采用先切图后拼凑的做法Q这U做法本来我惛_q里和大家介l一下,其实有的时候还是很有用的,但是说v来会比较ȝQ就不说q个非重点了Q略去,如果大家真的要介l,在回复中说明Q我再考虑一下?br /> Android针对q种情况Q专门制作了一U?9.PNG格式来解册个问题?/p>
我不惛_q里q多的讨论PNG格式的定义问题。但?9.PNG实是标准的PNG格式Q只是在最外面一圈额外增?px的边框,q个1px的边框就?用来定义囄中可扩展的和静态不变的区域。特别说明,left和topҎ中交叉部分是可拉伔R分,未选中部分是静态区域部分。right和bottom Ҏ中交叉部分则是内定w分(变相的相当于定义看一个内边距Q神似padding功能Q后面我会单独介l一下)Q这个参数是可选的, 如下图?br /> 在Android中以9.PNG格式的图片未背景Q则能够自定义拉伸而不qQ比如系l的Button是一个典型的例子?nbsp;
其实呢,无论是left和topQ还是right和bottom都是把图片分??(边角四块是不能羃攄Q其他的四块则是允许~放?Q所以叫?.PNG?/p>
前面已经了解?.PNG格式的工作方式,下面我们使用h提供的Draw9Patch(q行android-sdk-windows\tools目录下的Draw9Patch.bat)来制?9.PNG囄?br /> W一步:准备要拉伸的囄?/em>
非常的一张图片,我希望以此ؓ背景Q中间部分填充文章内宏V?br /> W二步:制作.9.PNG囄?br /> 打开Draw9Patch,把图片拖q去Q如下:
默认的拉伸是整体拉Q其实边框部分我们ƈ不想拉Q好Q我们自己来定义拉区域Q如下图Q?br />
新徏工程Draw9PatchQ默认主Activity为Draw9PatchActivity.java:1
@Override
2
public
void
onCreate(Bundle savedInstanceState)
3
{
4
super
.onCreate(savedInstanceState);
5
setContentView(R.layout.main);
6
}
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
03
android:orientation
=
"vertical"
04
android:layout_width
=
"fill_parent"
05
android:layout_height
=
"fill_parent"
06
android:background
=
"#777"
07
android:padding
=
"8dip"
08
>
09
<
TextView
10
android:layout_width
=
"fill_parent"
11
android:layout_height
=
"wrap_content"
12
android:text
=
"正文:A NinePatchDrawable graphic is a stretchable bitmap image."
13
android:background
=
"@drawable/content"
14
android:textColor
=
"#000"
15
/>
16
</
LinearLayout
>
我们修改textQ?/p> 01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
03
android:orientation
=
"vertical"
04
android:layout_width
=
"fill_parent"
05
android:layout_height
=
"fill_parent"
06
android:background
=
"#777"
07
android:padding
=
"8dip"
08
>
09
<
TextView
10
android:layout_width
=
"fill_parent"
11
android:layout_height
=
"wrap_content"
12
android:text
=
" 正文:A NinePatchDrawable graphic is a stretchable bitmap image, which Android will automatically resize to accommodate the contents of the View in which you have placed it as the background. A NinePatch drawable is a standard PNG image that includes an extra 1-pixel-wide border."
13
android:background
=
"@drawable/content"
14
android:textColor
=
"#000"
15
/>
16
</
LinearLayout
>
到这里ؓ止,我们已经基本会制?9.PNG囄了。ؓ了知识体pȝ全面性和深入性,我们l箋?/p>
是不是觉得文字和边距挨的太近Q好Q我们用right和bottom边的U来定义内容区域Q来辑ֈ增大内边距的目的?br />
我们定义了一个很的内容区域Q其他的地方则自动充当边框,从而内边距显的很大,如下图,
在这里,我要特别说明Q一开始ؓ了增大内边距Q很Ҏ惯性思维Q在<TextView>中申?android:padding="10dip" 之类的,我在q里劝告朋友们不要这么做Q一是你无法预知你的显C,二是q比较淆,因ؓ讄内容区域是定paddingQ所以我在前面部分说他们?似。我个h认ؓ通过内容区域讑֮padding比在布局xml中定义padding更优雅,更简z!
关于Draw9Patch工具的其他用说明,我在ơ不再篏qͼ因ؓ要说的话太多Qؓ了节省篇q,请参考官Ҏ档?/p>
对于初学Draw9Patch的h来说Q这可以是高技巧,那就是:拉区域Q可以不是连l的Q可以不止一块,而且是和自定义的ҎU的长度成正比?/em>
直接上图说明Q?br />
SDK专门针对9.PNG做了定义和处理,q里我们只是做个单的程分析QBitmap在读取图像流数据的时候,会把判断囄?NinePatchChunk(9Patch数据?Q如果NinePatchChunk不ؓI,则是 NinePatchDrawableQNinePatchDrawable则又会交lNinePatch处理Q?/p> 1
setNinePatchState(
new
NinePatchState(
2
new
NinePatch(bitmap, bitmap.getNinePatchChunk(),
"XML 9-patch"
),
3
padding, dither), r);
1
nativeDraw(canvas.mNativeCanvas, location,
2
mBitmap.ni(), mChunk, paint !=
null
? paint.mNativePaint :
0
,
3
canvas.mDensity, mBitmap.mDensity);
通过解压随便一个romQ找到里面的framework_res.apk,里面有大量的9.PNG格式文gQ被q泛的应用v来,比如常见的有Q?br /> 按钮Q?img src="http://pic002.cnblogs.com/images/2011/31770/2011041702450222.png" alt="" />
解锁Q?img src="http://pic002.cnblogs.com/images/2011/31770/2011041702484148.png" alt="" />
下拉框:
标题栏:
ToastQ?img src="http://pic002.cnblogs.com/images/2011/31770/2011041702520097.png" alt="" />
q有搜烦Q键盘,攑֤~小控gQ时间加减等{,我就不一一列D?/p> 8.最后送上一些图例,以飨读者,以做后鉴Q?/strong>
赏图1 本h之作
赏图2 下拉按钮
赏图3 文章头部背景
赏图4 pȝ头部背景转蝲?div>http://www.cnblogs.com/qianxudetianxia/archive/2011/04/17/2017591.html
]]>