2011年06月29日
by 江小邪
0 comments
1、制作一张启动图片splash.png,放置在res->drawable-hdpi文件夹中。
2、新建布局文件splash.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”
android:gravity=”bottom|center” android:orientation=”vertical”
android:background=”@drawable/splash”>
<TextView android:text=”@+id/TextView01″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:layout_marginTop=”20dip”
android:typeface=”sans” android:shadowDx=”0″ android:shadowDy=”2″
android:shadowRadius=”1″ android:shadowColor=”#FFFFFF”
android:textColor=”#444444″ android:textSize=”20dip” android:id=”@+id/versionNumber”
android:gravity=”bottom”>
</TextView>
</LinearLayout>
这里我们把上一步制作的图片作为启动界面的背景图,然后在界面底部显示当前程序的版本号。
3、新建SplashActivity,在Oncreate中添加以下代码:
setContentView(R.layout.splash);
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(“com.lyt.android”, 0);
TextView versionNumber = (TextView) findViewById(R.id.versionNumber);
versionNumber.setText(“Version ” + pi.versionName);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this,SplashScreenActivity.class);
startActivity(intent);
SplashActivity.this.finish();
}
}, 2500);
4、 修改Manifest文件,将启动界面Activity改为默认启动,并且设置标题栏不可见。
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.lyt.android” android:versionCode=”1″ android:versionName=”1.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.SplashActivity” android:label=”@string/app_name”
android:theme=”@android:style/Theme.NoTitleBar”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”.SplashScreenActivity” android:label=”@string/app_name” >
</activity>
</application>
<uses-sdk android:minSdkVersion=”8″ />
</manifest>
5、显示效果如下:

标签Tags:
Android笔记,
class,
code,
div,
ie,
title,
xml,
代码,
图片,
版本,
程序
Android笔记
2010年08月17日
by 江小邪
0 comments
看了网上很多的Nginx介绍,就跟着弄,发现总是限制不了速度: 配置如下
http {
limit_zone one $binary_remote_addr 10m;
server{ …..
location /attachments/ {
limit_conn one 1;
limit_rate 100k;
}
}
}
在万般无奈下,找到这样句话“如果把limti_rate直接放在server{}中,而不是location中,确实能实现限速,但我只想限制附件下载的速度,请问大大该怎么搞?” (更多…)
标签Tags:
code,
div,
html,
include,
mod,
PHP,
php5,
server,
title,
图片,
服务器构建&安全,
程序
服务器构建&安全
2010年07月26日
by 江小邪
0 comments
PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
我用一个留言本程序作为例子,阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。
此文本数据库共有字段10个:客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。
1、加入数据程序段。
$date=date(“Y-m-d H:i:s”);//取得系统时间
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得发言的IP地址
$text=encode($gb_text);//去掉留言内容后面的空格.
$fp=fopen(“gb.dat”,”a”);//以只写模式打开gb.dat文本文件,文件指针指向文件尾部.
$str=$ip.” ”.$date.” ”.$gb_name.” ”.$gb_email.” ”.$gb_home.” ”.$face.” ”.$gb_qq.” ”.$head.” ”.$text.” ”.$reply.”\n”;//将所有留言的数据赋予变量$str,” ”的目的是用来今后作数据分割时的数据间隔符号。
fwrite($fp,$str);//将数据写入文件
fclose($fp);//关闭文件
showmessage(“留言成功!”,”index.php”,”3″);//留言成功,3秒后自动返回主界面。
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。
(更多…)
标签Tags:
code,
PHP,
PHP,
server,
判断,
图片,
成功,
搜索,
数据,
数据库,
方法,
程序,
类,
系统,
网络编程,
获取,
表单,
诫,
连接,
页面
PHP, 网络编程
2010年07月26日
by 江小邪
0 comments
上个月我发现许多Web2.0网站大量运用了ajax,但是其中有些很奇怪,因为他们的速度比起前慢了,并且有时候不起作用(在移动设备上),我总结了十条用Ajax的错误(平台无关)
1、 不要通过把整个页面都放在UpdatePanel中更新整个页面。在你运行网页时需要节省时间,不要更新那些可以用javascript and DHTML (DOM)的部分。
2、 要始终记得有这么几种访问者,他们不能用JavaScript或者用的版本比较老的浏览器或者他们对JavaScript支持不好,比如说移动设备。如果这些都不支持,你的访问者能看到什么?
3、 在客户端浏览器缓存相同的请求或者在we服务器端执行缓存。最好的例子是自动完成个下拉菜单,他们的填充在任何时刻都是相同的,一个有错误写法的自动完成的写法可以减慢你的Web服务器(数据库服务器),因为那样会有比起以前用IsPostBack更多地请求。想一下不停的按F5刷新你的网页的情形。如果你有层叠的下拉菜单你就会结算更多地请求。
4、 在你运用CSS或JavaScript时,不要运行,并发的或者运行很长时间的Ajax请求,一般的浏览器只能有两个并发的http连接(我知道可以给变这个,但是默认的还是设为两个)。如果在读取图片的时候由很多Ajax请求的话,速度会变得很慢。
5、 什么时候都用异步调用的方法发送XMLHttpRequest.。如果你要用同步的方法也是没有请问题的,你的浏览器不会因为网络问题或是连接速度慢而冻结的
6、 试着让你的web应用使用一个很慢的网络连接,再尝试用快的TCP/IP连接
7、 你的web应用是作为桌面程序的替代品?你注意观察过一般浏览器在运行你的Web应用一小时,两小时或者几天时内存的使用。不是所有人都有你那样好的机器。
8、 检查在你返回XMLHttpRequest时你的http请求状态代码(status code),那会有一些常见的网络错误像是不可获得的DNS,Http Server error 500 ,你曾经检查过状态代码(status code),它可以告诉你浏览器在一个为连接的模式
9、 试着禁止XMLHttpRequest object!用IE7你能用native object代替ActiveX object,但是你也可以禁止native object。
10、检查你AJAX requests的安全性!你简单的打开了你的数据访问层吗?充分运用FormsAuthentication和PrincipalPermissions。是不是任何人都可以建立一个请求(不只是点击一个链接)?
标签Tags:
ajax,
code,
css,
dhtml,
html,
http请求状态,
ie,
javascript,
JavaScript&Ajax,
server,
status,
web,
web2.0,
xml,
xmlhttp,
人,
代码,
图片,
数据,
数据库,
方法,
更新,
浏览器,
版本,
程序,
网站,
网络编程,
连接,
链接,
错误,
页面
JavaScript&Ajax, 网络编程
2010年07月22日
by 江小邪
0 comments
在做网站过程中,常常要修改网站模板,而模板受css控制。如果在用CSS设计布局时遇到BUG,请认真阅读以下内容,非常容易记忆的,不知道哪位高人把CSS BUG编成了*****了!看看好不好记住呢?
一、IE边框若显若无,须注意,定是高度设置已忘记;
二、浮动产生有缘故,若要父层包含住,紧跟浮动要清除,容器自然显其中;
三、三像素文本慢移不必慌,高度设置帮你忙;
四、兼容各个浏览须注意,默认设置行高可能是*****;
五、独立清除浮动须铭记,行高设无,高设零,设计效果兼浏览;
六、学布局须思路,路随布局原理自然直,轻松驾驭html,流水布局少hack,代码清爽,兼容好,友好引擎喜欢迎。
七、所有标签皆有源,只是默认各不同,span是无极,无极生两仪—内联和块级,img较特殊,但也遵法理,其他只是改造各不同,一个*号全归原,层叠样式理须多练习,万物皆规律。
八、图片链接排版须小心,图片链接文字链接若对齐,padding和vertical-align:middle要设定,虽差微细倒无妨。
九、IE浮动双边距,请用display:inline拘。
十、列表横向排版,列表代码须紧靠,空隙自消须铭记。
标签Tags:
css,
html,
ie,
人,
代码,
兼容,
图片,
容器,
模板,
网站,
设计,
诫,
邪人邪语,
链接
邪人邪语
2010年05月23日
by 江小邪
2 comments
<html>
<head><title>新闻图片轮换类</title>
<script type=”text/javascript”>
var fs = new FadeSlideClass();
fs.Width = 430;
fs.Height = 250;
fs.AddImage(“http://www.5bay.cn/Test/Image/001.jpg“, “#”, “新闻标题”);
fs.AddImage(“http://www.5bay.cn/Test/Image/002.jpg“, “#”, “新闻标题”);
fs.AddImage(“http://www.5bay.cn/Test/Image/003.jpg“, “//g.cn”, “去Google”);
fs.AddImage(“http://www.5bay.cn/Test/Image/004.jpg“, “#”, “新闻标题”);
fs.AddImage(“http://www.5bay.cn/Test/Image/005.jpg“, “#”, “新闻标题”);
fs.RenderTo(“divStage”);
/* 以下代码构造轮换类 */
function FadeSlideClass()
{
this.Width = 450;
this.Height = 300;
this.BorderColor = “#ddd”;
this.CurrentColor = “green”;
this.Delay = 5000;
var divContainer = document.createElement(“div”);
var divImage = document.createElement(“div”);
var ulList = document.createElement(“ul”);
var me = this;
var arrImg = new Array;
this.Tag = divContainer;
this.AddImage = function(strImageUrl, strLink, strTitle)
{
arrImg.push(arguments);
}
this.RenderTo = function(container)
{
if(typeof container == “string”) container = document.getElementById(container) || container;
if(typeof container == “string”) return setTimeout(function(){ me.RenderTo(container); }, 100);
if(!arrImg.length) throw new Error(“尚未添加图片。”);
var cssFloat = typeof ulList.style.cssFloat == “string” ? “cssFloat” : “styleFloat”;
divContainer.style.width = this.Width + “px”;
divContainer.style.height = this.Height + “px”;
divImage.style.width = Math.round(this.Width * (arrImg.length – 1) / arrImg.length) + “px”;
divImage.style.height = this.Height + “px”;
divImage.style[cssFloat] = “left”;
ulList.style.width = (this.Width – parseInt(divImage.style.width)) + “px”;
ulList.style.height = this.Height + “px”;
ulList.style.margin = “0px”;
ulList.style.padding = “0px”;
ulList.style[cssFloat] = “left”;
divContainer.style.overflow = “hidden”;
divImage.style.overflow = “hidden”;
ulList.onmouseover = function(){ clearTimeout(me.Handler) };
ulList.onmouseout = function(){ AutoPlay(); };
InitImage(2);
InitList(arrImg.length);
container.appendChild(divContainer);
divContainer.appendChild(divImage);
divContainer.appendChild(ulList);
LiMouseOver.call(ulList.firstChild);
AutoPlay();
this.AddImage = function(){ throw new Error(“该方法已过时。”); }
}
this.Display = function(imgThumb)
{
var img = divImage.lastChild.lastChild;
var opa = new OpacityClass(img);
opa.Set(20);
img.src = imgThumb.src;
img.parentNode.href = imgThumb.parentNode.href;
img.parentNode.title = imgThumb.parentNode.title;
clearInterval(ulList.Handler);
ulList.Handler = setInterval(function(){
if(opa.Add(5) >= 100)
{
divImage.firstChild.lastChild.src = img.src;
clearInterval(ulList.Handler);
}
}, 25);
}
function LiMouseOver()
{
if(this == ulList.oldLi) return;
if(ulList.oldLi) ulList.oldLi.style.borderColor = me.BorderColor;
this.style.borderColor = me.CurrentColor;
ulList.oldLi = this;
me.Display(this.firstChild.firstChild);
}
function InitImage(count)
{
if(–count) arguments.callee(count);
var a = document.createElement(“a”);
a.target = “_blank”;
divImage.appendChild(a).style.position = “absolute”;
var img = new Image;
img.width = parseInt(divImage.style.width);
img.height = me.Height;
img.border = 0;
if(!a.appendChild(img).filters) img.style.opacity = 1;
else img.style.filter = “alpha(opacity=100)”;
}
function InitList(count)
{
if(–count) InitList(count);
var isIeNoDtd = document.compatMode != “CSS1Compat” && /msie/i.test(navigator.userAgent);
var data = arrImg[count];
var thumbWidth = parseInt(ulList.style.width);
var thumbHeight = Math.round(me.Height / arrImg.length);
var li = document.createElement(“li”);
li.style.overflow = “hidden”;
li.style.width = (isIeNoDtd ? thumbWidth : thumbWidth – 4) + “px”;
li.style.height = (isIeNoDtd ? thumbHeight : thumbHeight – 4) + “px”;
li.style.borderWidth = “2px”;
li.style.borderStyle = “solid”;
li.style.borderColor = me.BorderColor;
var a = document.createElement(“a”);
a.target = “_target”;
a.href = data[1];
a.title = data[2];
var img = new Image;
img.border = 0;
img.width = thumbWidth;
img.height = thumbHeight;
img.src = data[0];
img.style.verticalAlign = “top”;
img.style.margin = “-2px”;
a.appendChild(img);
li.appendChild(a);
li.style.listStyle = “none”;
li.onmouseover = LiMouseOver;
ulList.appendChild(li);
}
function AutoPlay()
{
me.Handler = setTimeout(function()
{
LiMouseOver.call(ulList.oldLi.nextSibling || ulList.firstChild);
AutoPlay();
}, me.Delay);
}
function OpacityClass(tag)
{
var isFilter = !!tag.filters;
var obj = isFilter ? tag.filters.alpha : tag.style;
this.Set = function(value)
{
obj.opacity = isFilter ? value : value / 100;
return this;
}
this.Add = function(value)
{
var opa = isFilter ? obj.opacity : obj.opacity * 100;
opa += value;
if(opa > 100) opa = 100;
obj.opacity = isFilter ? opa : opa / 100;
return this;
}
this.valueOf = function()
{
return isFilter ? obj.opacity : obj.opacity * 100;
}
}
}
</script>
</head>
<body>
<div id=”divStage”></div>
</body>
</html>
标签Tags:
class,
css,
div,
google,
html,
ie,
javascript,
JavaScript&Ajax,
mod,
seo,
title,
url,
代码,
图片,
方法,
类,
网络编程
JavaScript&Ajax, 网络编程
2010年05月23日
by 江小邪
1 comment
正则表达式匹配,其中:
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
flag标记有:
* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向 地址栏会显示跳转后的地址
* permanent 返回301永久重定向 地址栏会显示跳转后的地址
一些可用的全局变量有,可以用做条件判断(待补全) (更多…)
标签Tags:
301,
access,
cookie,
css,
domain,
html,
ie,
include,
js,
PHP,
seo,
server,
sql,
swf,
web,
判断,
图片,
密码,
服务器构建&安全,
正则表达式,
浏览器,
网站,
自定义,
表,
重定向,
链接,
错误,
页面
服务器构建&安全
2010年05月23日
by 江小邪
0 comments
规则1,减少HTTP请求
这是最重要的原则,如果14条规则里只能选一条,那就是它了。可以通过多种方法减少HTTP请求,例如合并图片,合并JS和CSS等等。这一点薄荷网有很多改进的余地,首先应该把现在的JS合并了。
规则2,使用内容发布网络
内容发布网络就是CDN了,但是CDN似乎挺贵的,目前还不适合薄荷网,不过可以考虑自己弄一个网通的静态资源服务器解决有中国特色的可恶的南北互通问题。
规则3,添加Expires头
这个没什么好说的,是个建网站的人都应该知道。目前薄荷网图片,css,js,flash过期时间设置了3年,可以说是永久了,:) Expires有个麻烦的地方是内容更新问题,Ruby on Rails这方面处理的非常棒,它是在文件名后面自动带了
资源文件的timestamp,完美解决。 (更多…)
标签Tags:
ajax,
css,
flash,
javascript,
js,
server,
url,
web,
中国特色,
人,
图片,
方法,
更新,
服务器构建&安全,
浏览器,
组件,
网站,
表,
解决,
设计,
重定向,
页面
服务器构建&安全
2008年11月12日
by 江小邪
0 comments
今天,在作一个网页特效的时候,
遇到了一个状况,
因為要作的功能是,卷动瀏览器的卷轴后,
广告图片会跟著滑动.
而这功能,在网路上已经有很多范例了,
所以特别挑了一个简短而且在IE跟Firefox上都可以用的来,
稍微修改一下,写个范例测试,没有问题就想说可以开始套了,
结果没想到将那个片段套在程式裡以后,却不会动…
所以只好重头debug了.
debug到后来才发现,
原本的测试网页中使用的document.body.scrollTop是正常的,
但是套用到php的页面时,
不管怎麼卷动,document.body.scrollTop都是0. (更多…)
标签Tags:
code,
firefox,
google,
html,
ie,
JavaScript&Ajax,
PHP,
图片,
网站,
页面
JavaScript&Ajax
2008年10月17日
by 江小邪
0 comments
3d 游戏会用到大量的帖图,许多显卡要求贴图的尺寸必须是2的整数次方。这样,许多贴图的边角都会被浪费掉。尤其是大量无关的小贴图,我们通常想把他们合并在一张贴图上,尽量充满整个区域。
合并这些零碎贴图的算法,在学术上被称为排料问题。我尚未找到特别好的解决方法,所以这里就不展开写了。这里想讨论的是这些小贴图的管理。
我们现在的思路是,在engine 的比较上的层次,不用关心需要用的贴图在哪里,在哪张图片上的哪个区域。这样做,就不用局限于相关的图放在一张物理的图片上,可以由工具任意分割打包组合。固然,不相干的贴图过于零碎的逻辑贴图分散在不同的物理图片上,会降低效率。但这个问题就和内存分配器的实现中,内存碎片的问题一样,是不可避免但却可以有诸多方法来改善的。
其实 DirectX 本就充当了一个显存管理器的工作。我们做的只是在这种基于动态的管理模式上再加一层事前的开发期优化而已。
实现的方法很简单,用一个文本文件描述另一个图片文件的区域即可。engine 只需要把这个文件当作一个逻辑贴图打开解析。至于物理图片文件的管理,交给资源管理模块即可。
而这个文件的生成和管理,就得另写一个工具了。能写出优秀的图片自动组合工具固然好,如果没有也可以退而求其次,做一个可以给人像搭积木一样的拼图工具也可以。可以方便的让人来把零散的图片见缝插针的拼到一起,未尝不是一件趣事
标签Tags:
人,
图片,
工具,
方法,
游戏,
游戏开发,
解决,
解决方法
游戏开发