框架下载地址:http://code.google.com/p/loon-simple/downloads/list
下面就讲解下项目中怎么引入游戏框架LGame:
•新建android项目“LGameTest1”,在项目根目录下新建文件夹libs,将下载的LGame框架的jar包放到该文件夹下,然后在Eclipse中右击项目,选择“Build Path->Configure Build Path…->Add External JARs…”选择刚才放到libs文件夹下的jar包,这样框架就被引入到项目中。
•建立简单应用,主程序文件:Main.java、TestScreen.java,代码讲解放在文件里面。
Main.java文件如下:
代码如下 |
复制代码 |
package org.loon.game.lgametest1;
import org.loon.framework.android.game.LGameAndroid2DActivity;
public class Main extends LGameAndroid2DActivity {
@Override
public void onGamePaused() {
// TODO Auto-generated method stub
}
@Override
public void onGameResumed() {
// TODO Auto-generated method stub
}
@Override
public void onMain() {
//设置游戏窗体大小,默认为320 * 480(纵)、480 * 320(横)
maxScreen(480, 800);
/**
* initialization是LGAme的游戏窗体级Admob广告初始用函数,当Initialization为true时,游戏将以横屏显示,
* 否则以纵屏显示,它的出现位置应该保存在maxScreen设定之后,其它设定出现之前。此外,在Initialization中
* 也可以顺序设置Admob广告是否显示,广告的出现位置,广告的标识ID,广告的关键字,以及广告的刷新频率
* android:screenOrientation="portrait"
*/
this.initialization(false);
/**
* 设定游戏画面的刷新速度(该设定只对默认的标准的Screen类有效)
*/
this.setFPS(40);
//设置场景
this.setScreen(new TestScreen());
/**
* 设定游戏初始logo是否被显示
*/
this.setShowLogo(false);
/**
* 设置是否显示游戏FPS(仅对标准的Screen有效)
*/
this.setShowFPS(true);
System.out.println("nieyanlong");
/**
* 显示Screen窗体
*/
this.showScreen();
}
}
|
TestScreen.java文件如下:
代码如下 |
复制代码 |
package org.loon.game.lgametest1;
import org.loon.framework.android.game.core.graphics.Screen;
import org.loon.framework.android.game.core.graphics.opengl.GLEx;
import org.loon.framework.android.game.core.graphics.opengl.LTexture;
import org.loon.framework.android.game.core.input.LTouch;
import org.loon.framework.android.game.core.timer.LTimerContext;
import android.util.Log;
public class TestScreen extends Screen {
private LTexture[] images;
@Override
public void onLoad() {
//记录日志
Log.d("LGAMETEST1", "here it is onLoad");
LTexture.AUTO_LINEAR();
images = new LTexture[1];
//assets放置资源文件
images[0] = new LTexture("assets/background.png");
//设置当前Screen的背景图片
setBackground(getImage(0));
//背景音乐,"main.mp3"文件放置在assets文件夹下面
playAssetsMusic("main.mp3", true);
}
/**
* 获得图片
* @param i
* @return LTexture
*/
public LTexture getImage(int i) {
return images[i];
}
@Override
public void alter(LTimerContext arg0) {
// TODO Auto-generated method stub
}
@Override
public void draw(GLEx arg0) {
// TODO Auto-generated method stub
}
@Override
public void touchDown(LTouch arg0) {
// TODO Auto-generated method stub
}
@Override
public void touchMove(LTouch arg0) {
// TODO Auto-generated method stub
}
@Override
public void touchUp(LTouch arg0) {
// TODO Auto-generated method stub
}
}
|
android中的sqlite实现程序 有需要学习的朋友可参考参考。
新建项目Events,项目的主程序文件有:Events.java、EventsData.java、Constants.java;布局文件有item.xml。
Events.java文件是项目的入口文件,大致如下:
代码如下 |
复制代码 |
package org.hxsd.events;
import static android.provider.BaseColumns._ID;
import static org.hxsd.events.Constants.TABLE_NAME;
import static org.hxsd.events.Constants.TIME;
import static org.hxsd.events.Constants.TITLE;
import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.SimpleCursorAdapter;
public class Events extends ListActivity {
private EventsData events;
//查询的字段
private static String[] FROM = {_ID, TIME, TITLE};
//排序
private static String ORDER_BY = TIME + " DESC";
//显示
private static int[] TO = {R.id.rowid, R.id.time, R.id.title};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
events = new EventsData(this);
try{
//添加记录
addEvent("Hello, Android!");
//获得记录信息
Cursor cursor = getEvents();
//显示记录信息
showEvents(cursor);
}finally{
//关闭数据库
events.close();
}
}
/**
* 添加数据
* @param string
*/
private void addEvent(String string){
SQLiteDatabase db = events.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(TIME, System.currentTimeMillis());
values.put(TITLE, string);
db.insertOrThrow(TABLE_NAME, null, values);
}
/**
* 获得记录
* @return
*/
private Cursor getEvents(){
SQLiteDatabase db = events.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, ORDER_BY);
startManagingCursor(cursor);
return cursor;
}
/**
* 显示记录
* @param cursor
*/
private void showEvents(Cursor cursor){
/*StringBuilder builder = new StringBuilder("Saved events:n");
while(cursor.moveToNext()){
long id = cursor.getLong(0);
long time = cursor.getLong(1);
String title = cursor.getString(2);
builder.append(id).append(": ");
builder.append(time).append(": ");
builder.append(title).append("n");
}
TextView textView = (TextView) findViewById(R.id.TextView01);
textView.setText(builder);*/
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, FROM, TO);
setListAdapter(adapter);
}
}
EventsData.java文件大致如下:
package org.hxsd.events;
import static android.provider.BaseColumns._ID;
import static org.hxsd.events.Constants.TABLE_NAME;
import static org.hxsd.events.Constants.TIME;
import static org.hxsd.events.Constants.TITLE;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class EventsData extends SQLiteOpenHelper{
//数据库名称
private static final String DATABASE_NAME = "events.db";
//数据库版本
private static final int DATABASE_VERSION = 2;
//构造函数
public EventsData(Context ctx){
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建数据表events
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + TIME + " INTEGER," + TITLE + " TEXT NOT NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//如果版本有改动,删除表events然后新建
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
|
Constants.java文件大致如下:
代码如下 |
复制代码 |
package org.hxsd.events;
import android.provider.BaseColumns;
public interface Constants extends BaseColumns{
//表名称
public static final String TABLE_NAME = "events";
//字段名称
public static final String TIME = "time";
public static final String TITLE = "title";
}
item.xml文件为布局文件,位于res文件夹下的layout下面,大致如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/rowid"
android:paddingRight="40dip"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/time"
android:layout_toRightOf="@id/rowid"
android:paddingRight="40dip"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/title"
android:layout_toRightOf="@id/time"
android:paddingRight="40dip"/>
</RelativeLayout>
|
下面我们来介绍Android通过xml文件来设置背景透明度实现程序,有需要的朋友可参考。
•通过XML文件设置
代码如下 |
复制代码 |
半透明 <RelativeLayout android:background=”#c0000000″…>
完全不透明<RelativeLayout android:background=”#ff000000″ … />
完全透明<RelativeLayout android:background=”#00000000″ … />
|
颜色和不透明度(alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是0到255(00 到 ff)。00 表示完全透明,ff 表示完全不透明。表达式顺序是“aabbggrr”,其中aa=alpha表示透明度,bb=blue(00 到 ff);gg=green(00 到 ff);rr=red(00 到 ff)。
•通过程序代码设置
代码如下 |
复制代码 |
RelativeLayout bottomLayout = (RelativeLayout) findViewById(R.id.view_bottomview); //通过ID获得View
bottomLayout.getBackground().setAlpha(128); //0~255透明度值 ,0为完全透明,255为不透明 |
ImageView.ScaleType 及android:scaleType值的意义和区别 ,下面我来介绍介绍,有需要的朋友可参考一下。 CENTER /center:按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示;
CENTER_CROP / centerCrop:按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽);
CENTER_INSIDE / centerInside:将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽;
FIT_CENTER / fitCenter:把图片按比例扩大/缩小到View的宽度,居中显示;
FIT_END / fitEnd:把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置;
FIT_START / fitStart:把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置;
FIT_XY / fitXY:把图片不按比例扩大/缩小到View的大小显示;
MATRIX / matrix:用矩阵来绘制,动态缩小放大图片来显示
我们做Android开发时奖保存图片到SD卡,但是Gallery中不能及时显示 下面我找到了问题所在然后解决了这个问题。
当保存图片后打开gallery时,有的会自动给你刷新,有的不行,这样就导致图片保存到SD卡上时,不能及时在gallery中看到,遇到这种情况最好是自己刷新。
通过 Intent.ACTION_MEDIA_MOUNTED 进行整个SD卡扫描:
代码如下 |
复制代码 |
public void sdScan(){
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
}
|
通过 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 扫描某个文件:
代码如下 |
复制代码 |
public void fileScan(String filePath){
Uri data = Uri.parse("file://"+filePath);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
}
|
注:filePath为图片在SD卡中的地址,当保存图片后,调用以上方法即可; sendBroadcast为类Context的一个方法。
标签:[!--infotagslink--]