package irdc.ex07_03;
import java.util.Date;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
public class EX07_03 extends Activity
{
private TextView mTextView01;
private ImageView mImageView01;
/* LayoutInflater物件作為新建AlertDialog之用 */
private LayoutInflater mInflater01;
/* 輸入解鎖的View */
private View mView01;
private EditText mEditText01,mEditText02;
/* menu選項identifier,用以識別事件 */
static final private int MENU_ABOUT = Menu.FIRST;
static final private int MENU_EXIT = Menu.FIRST+1;
private Handler mHandler01 = new Handler();
private Handler mHandler02 = new Handler();
private Handler mHandler03 = new Handler();
private Handler mHandler04 = new Handler();
/* 控制User靜止與否的Counter */
private int intCounter1, intCounter2;
/* 控制FadeIn與Fade Out的Counter */
private int intCounter3, intCounter4;
/* 控制循序替換背景圖ID的Counter */
private int intDrawable=0;
/* 上一次User有動作的Time Stamp */
private Date lastUpdateTime;
/* 計算User共幾秒沒有動作 */
private long timePeriod;
/* 靜止超過n秒將自動進入螢幕保護 */
private float fHoldStillSecond = (float) 5;
private boolean bIfRunScreenSaver;
private boolean bFadeFlagOut, bFadeFlagIn = false;
private long intervalScreenSaver = 1000;
private long intervalKeypadeSaver = 1000;
private long intervalFade = 100;
private int screenWidth, screenHeight;
/* 每n秒置換圖片 */
private int intSecondsToChange = 5;
/* 設定Screen Saver需要用到的背景圖 */
private static int[] screenDrawable = new int[]
{
R.drawable.screen1,
R.drawable.screen2,
R.drawable.screen3,
R.drawable.screen4,
R.drawable.screen5
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/* 必須在setContentView之前呼叫全螢幕顯示 */
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags
(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
setContentView(R.layout.main);
/* onCreate all Widget */
mTextView01 = (TextView)findViewById(R.id.myTextView1);
mImageView01 = (ImageView)findViewById(R.id.myImageView1);
mEditText01 = (EditText)findViewById(R.id.myEditText1);
/* 初始取得User觸碰手機的時間 */
lastUpdateTime = new Date(System.currentTimeMillis());
/* 初始化Layout上的Widget可見性 */
recoverOriginalLayout();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// TODO Auto-generated method stub
/* menu群組ID */
int idGroup1 = 0;
/* The order position of the item */
int orderMenuItem1 = Menu.NONE;
int orderMenuItem2 = Menu.NONE+1;
/* 建立具有SubMenu的menu */
menu.add(idGroup1, MENU_ABOUT, orderMenuItem1, R.string.app_about);
/* 建立離開 */
menu.add(idGroup1, MENU_EXIT, orderMenuItem2, R.string.str_exit);
menu.setGroupCheckable(idGroup1, true, true);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// TODO Auto-generated method stub
switch(item.getItemId())
{
case (MENU_ABOUT):
new AlertDialog.Builder
(
EX07_03.this
).setTitle(R.string.app_about).setIcon
(
R.drawable.hippo
).setMessage
(
R.string.app_about_msg
).setPositiveButton(R.string.str_ok,
new DialogInterface.OnClickListener()
{
public void onClick
(DialogInterface dialoginterface, int i)
{
}
}).show();
break;
case (MENU_EXIT):
/* 離開程式 */
finish();
break;
}
return super.onOptionsItemSelected(item);
}
/* 監控User沒有動作的執行緒 */
private Runnable mTasks01 = new Runnable()
{
public void run()
{
intCounter1++;
Date timeNow = new Date(System.currentTimeMillis());
/* 計算User靜止不動作的時間間距 */
timePeriod = (long)timeNow.getTime() - (long)lastUpdateTime.getTime();
float timePeriodSecond = ((float)timePeriod/1000);
/* 如果超過時間靜止不動 */
if(timePeriodSecond>fHoldStillSecond)
{
/* 靜止超過時間第一次的標記 */
if(bIfRunScreenSaver==false)
{
/* 啟動執行緒2 */
mHandler02.postDelayed(mTasks02, intervalScreenSaver);
/* Fade Out*/
if(intCounter1%(intSecondsToChange)==0)
{
bFadeFlagOut=true;
mHandler03.postDelayed(mTasks03, intervalFade);
}
else
{
/* 在Fade Out後立即Fade In */
if(bFadeFlagOut==true)
{
bFadeFlagIn=true;
mHandler04.postDelayed(mTasks04, intervalFade);
}
else
{
bFadeFlagIn=false;
intCounter4 = 0;
mHandler04.removeCallbacks(mTasks04);
}
intCounter3 = 0;
bFadeFlagOut = false;
}
bIfRunScreenSaver = true;
}
else
{
/* screen saver 正在執行中 */
/* Fade Out*/
if(intCounter1%(intSecondsToChange)==0)
{
bFadeFlagOut=true;
mHandler03.postDelayed(mTasks03, intervalFade);
}
else
{
/* 在Fade Out後立即Fade In */
if(bFadeFlagOut==true)
{
bFadeFlagIn=true;
mHandler04.postDelayed(mTasks04, intervalFade);
}
else
{
bFadeFlagIn=false;
intCounter4 = 0;
mHandler04.removeCallbacks(mTasks04);
}
intCounter3 = 0;
bFadeFlagOut=false;
}
}
}
else
{
/* 當User沒有動作的間距未超過時間 */
bIfRunScreenSaver = false;
/* 恢復原來的Layout Visible*/
recoverOriginalLayout();
}
/* 以LogCat監看User靜止不動的時間間距 */
Log.i("HIPPO", "Counter1:"+Integer.toString(intCounter1)+"/"+Float.toString(timePeriodSecond));
/* 反覆執行執行緒1 */
mHandler01.postDelayed(mTasks01, intervalKeypadeSaver);
}
};
/* Screen Saver Runnable */
private Runnable mTasks02 = new Runnable()
{
public void run()
{
if(bIfRunScreenSaver==true)
{
intCounter2++;
hideOriginalLayout();
showScreenSaver();
//Log.i("HIPPO", "Counter2:"+Integer.toString(intCounter2));
mHandler02.postDelayed(mTasks02, intervalScreenSaver);
}
else
{
mHandler02.removeCallbacks(mTasks02);
}
}
};
/* Fade Out特效Runnable */
private Runnable mTasks03 = new Runnable()
{
public void run()
{
if(bIfRunScreenSaver==true && bFadeFlagOut==true)
{
intCounter3++;
/* 設定ImageView的透明度漸暗下去 */
mImageView01.setAlpha(255-intCounter3*28);
Log.i("HIPPO", "Fade out:"+Integer.toString(intCounter3));
mHandler03.postDelayed(mTasks03, intervalFade);
}
else
{
没有合适的资源?快使用搜索试试~ 我知道了~
Google Android SDK开发范例大全(完整版)源代码(第2章--10章)
共1975个文件
xml:628个
java:349个
prefs:307个
5星 · 超过95%的资源 需积分: 7 24 下载量 107 浏览量
2010-10-26
14:00:49
上传
评论
收藏 7.11MB 7Z 举报
温馨提示
Google Android SDK开发范例大全(完整版)源代码(第2章--10章)
资源推荐
资源详情
资源评论
收起资源包目录
Google Android SDK开发范例大全(完整版)源代码(第2章--10章) (1975个子文件)
.classpath 302B
.classpath 298B
.classpath 291B
.classpath 285B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
.classpath 238B
共 1975 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- lova772013-04-10很好的资源,看原书上的代码伤不起啊.
- liuzhilei8862012-08-03很详细,有参考价值。
wind.liao
- 粉丝: 81
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功