6、ImageAdapter
public class ImageAdapter extends BaseAdapter {
private Context mContext;// 上下文
public ImageAdapter(Context c) {
this.mContext = c;
}
@Override
public int getCount() {
if (imageList != null) {
return imageList.size();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
if (imageList != null) {
return imageList.get(position);
}
return position;// 获取图片在库中的位置
}
@Override
public long getItemId(int position) {
return position;// 获取图片在库中的位置
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("Tag", position + "");
ImageView imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(220, 247));
if (imageList.get(position).getIsNull().equals(ISTRUE)) {
imageView.setImageResource(R.drawable.scene_ic_loading_invert);
} else {
imageView.setImageBitmap(imageList.get(position).getImage());
}
return imageView;
}
public float getScale(boolean focused, int offset) {
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
}
}
7、查找图片是加载的进度条
@Override
protected Dialog onCreateDialog(int id) {
if (id == 0) {
ProgressDialog loadingDialog = new ProgressDialog(this);
loadingDialog.setMessage("正在扫描中...,请稍候!");
loadingDialog.setIndeterminate(true);
loadingDialog.setCancelable(true);
return loadingDialog;
}
return null;
}
8、5、从sd卡里获取图片
public void getSD(String dir) {
File f = new File(dir);
File[] files = f.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
String[] s = new String[2];
File file = files[i];
if (file.isFile()) {
if (ImageManager.getImageFile(file.getPath())) {
System.out.println("file " + String.valueOf(file));
s[0] = file.getPath();
s[1] = file.getName();
pathList.add(s);
}
} else if(file.isDirectory()){
getSD(String.valueOf(file.getAbsolutePath()));
}
}
}
}
这个第四个实例,我只是单纯的把j2me的代码换成android的,所以屏幕的大小的适应性和好不好看,我都没有考虑。
下面给出第四个实例的MainView的代码
效果图:
package com.wjh.demon_4;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class MainView extends SurfaceView implements Callback,Runnable{
int keyCode = 0;
String keyAction = "";
Thread gameThread = null;
boolean isGame = true;
SurfaceHolder holder = null;
public char m_achWords[][] = //存储原始字符矩阵
{ {'H', 'R', 'T', 'W', 'T'},
{'E', 'I', 'H', 'O', 'H'},
{'L', 'G', 'I', 'R', 'R'},
{'L', 'H', 'N', 'L', 'E'},
{'O', 'T', 'G', 'D', 'E'} };
public int m_nCurLine = 0; //记录当前行
public int m_anDis[] = { 0,1,2,3,4 };
public boolean m_bGameOK = false; //组合成功的标志
public MainView(Context context) {
super(context);
// TODO Auto-generated constructor stub
setFocusable(true);
getHolder().addCallback(this);
holder = this.getHolder();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(isGame)
{
input();
logic();
doDraw();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//开始游戏主线程
public void start()
{
if(gameThread == null)
{
gameThread = new Thread(this);
gameThread.start();
}
}
//停止游戏主线程
public void stop()
{
isGame = false;
if(gameThread != null)
{
try {
gameThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//输入判断
public void input()
{
}
//逻辑判断
public void logic()
{
if( m_bGameOK )
return;
m_bGameOK = true;
for( int n = 0; n < 5; n ++ ){
if( m_anDis[n] != 0 ){
m_bGameOK = false;
break;
}
}
}
public void doDraw()
{
Canvas c = null;
try
{
c = holder.lockCanvas();
synchronized (holder) {
paint(c);
}
}finally{
if(c != null)
{
holder.unlockCanvasAndPost(c);
}
}
}
//画图
public void paint(Canvas canvas)
{
Paint backGround = new Paint();
backGround.setColor(Color.BLACK);
//清屏
canvas.drawRect(0, 0, getWidth(), getHeight(), backGround);
//设置画笔颜色
Paint cPaint = new Paint();
//显示字符
//realCol为所显示的字符在原始矩阵中的列数
int realCol = 0;
//row为行数,col为列数
for( int row = 0; row < 5; row ++ ){
if( row == m_nCurLine ) //当前行的字符用黄色显示
cPaint.setColor(Color.YELLOW);
else
cPaint.setColor(Color.WHITE); //非当前行的字符用白色显示
for( int col = 0; col < 5; col ++ ){
//利用偏位数得到与当前位置对应的原始矩阵中的位置
realCol = m_anDis[row] + col;
if( realCol > 4 )
realCol = realCol - 5;
canvas.drawText(""+m_achWords[row][realCol], 30 + col * 15, 30+row * 15, cPaint);
}
}
cPaint.setColor(Color.WHITE);
if( m_bGameOK )
canvas.drawText("真棒,完全正确", 50, 120, cPaint);
else
canvas.drawText("左右移动字符,使纵向拼写正确", 40, 120, cPaint);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
stop();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if( m_bGameOK )
return true; //得到当前按键状态
//如果按下方向键的上键,则调整当前行的位置
if( keyCode == KeyEvent.KEYCODE_DPAD_UP )
m_nCurLine --;
//如果按下方向键的下键,则调整当前行的位置
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
m_nCurLine ++;
//调整当前行的值,使它在0到4之间
if( m_nCurLine < 0 )
m_nCurLine += 5;
if( m_nCurLine > 4)
m_nCurLine -= 5;
//如果按下方向键的左键,则当前行的字符左移
if( keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
m_anDis[m_nCurLine] ++;
//如果按下方向键的右键,则当前行的字符右移
if( keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
m_anDis[m_nCurLine] --;
if( m_anDis[m_nCurLine] < 0 )
m_anDis[m_nCurLine] += 5;
if( m_anDis[m_nCurLine] > 4 )
m_anDis[m_nCurLine] -= 5;
return super.onKeyDown(keyCode, event);
}
}
apk文件(将后缀改为apk):Demon_4.zip
源代码文件:Demon_4.rar
在Android中有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvider。SharedPreferences作为操作简单最简单的一种方式,被广泛用于保存应用的配置信息,这里介绍下SharedPreferences
SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。 实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。
向SharedPreferences中写入数据
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
editor.commit(); //一定要记得提交
从SharedPreferences中读取数据
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
//或者使用 SharedPreferences settings = getPreferences(0);
boolean silent = settings.getBoolean("silentMode", false);
函数介绍:
1、android.content.Context.getSharedPreferences (String name, int mode)
3、android.preference.Preference.getSharedPreferences()
返回当前Preference可以访问的SharedPreferences
下篇文章介绍对于SharedPreferences如何在不同的activity中访问,以及如何直接访问任何可以访问的SharedPreferences。比如对于上面方法3存储的SharedPreferences如何在Activity中进行访问
参考:
http://www.cnblogs.com/jerrychoi/archive/2010/04/14/1712151.html
http://www.eoeandroid.com/sdk/api/reference/android/preference/Preference.html#getSharedPreferences()
http://www.eoeandroid.com/sdk/api/reference/android/content/Context.html#getSharedPreferences(java.lang.String, int)
http://www.eoeandroid.com/sdk/api/reference/android/app/Activity.html#getPreferences(int)