太长放不下。这是后面一部分。 /* 恢復原有的Layout可視性 */
private void recoverOriginalLayout()
{
mTextView01.setVisibility(View.VISIBLE);
mEditText01.setVisibility(View.VISIBLE);
mImageView01.setVisibility(View.GONE);
}
/* 隱藏原有應用程式裡的版面配置元件 */
private void hideOriginalLayout()
{
/* 將欲隱藏的Widget寫在此 */
mTextView01.setVisibility(View.INVISIBLE);
mEditText01.setVisibility(View.INVISIBLE);
}
/* 開始ScreenSaver */
private void showScreenSaver()
{
/* 螢幕保護之後要做的事件寫在此*/
if(intDrawable>4)
{
intDrawable = 0;
}
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
Bitmap bmp=BitmapFactory.decodeResource(getResources(), screenDrawable[intDrawable]);
/* Matrix比例 */
float scaleWidth = ((float) screenWidth) / bmp.getWidth();
float scaleHeight = ((float) screenHeight) / bmp.getHeight() ;
Matrix matrix = new Matrix();
/* 使用Matrix.postScale設定維度ReSize */
matrix.postScale(scaleWidth, scaleHeight);
/* ReSize圖檔至螢幕解析度 */
Bitmap resizedBitmap = Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true);
BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap);
mImageView01.setImageDrawable(myNewBitmapDrawable);
/* 使ImageView可見 */
mImageView01.setVisibility(View.VISIBLE);
/* 每間隔設定秒數置換圖片ID,於下一個runnable2才會生效 */
if(intCounter2%intSecondsToChange==0)
{
intDrawable++;
}
}
public void onUserWakeUpEvent()
{
if(bIfRunScreenSaver==true)
{
try
{
/* LayoutInflater.from取得此Activity的context */
mInflater01 = LayoutInflater.from(EX07_03.this);
/* 建立解鎖密碼使用View的Layout */
mView01 = mInflater01.inflate(R.layout.securescreen, null);
/* 於對話方塊中唯一的EditText等待輸入解鎖密碼 */
mEditText02 = (EditText) mView01.findViewById(R.id.myEditText2);
/* 建立AlertDialog */
new AlertDialog.Builder(this)
.setView(mView01)
.setPositiveButton("OK",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
/* 比對輸入的密碼與原Activity裡的設定是否相符 */
if(mEditText01.getText().toString().equals(mEditText02.getText().toString()))
{
/* 當密碼正確才真的解鎖螢幕保護裝置 */
resetScreenSaverListener();
}
}
}).show();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public void updateUserActionTime()
{
/* 取得按下按鍵事件時的系統Time Millis */
Date timeNow = new Date(System.currentTimeMillis());
/* 重新計算按下按鍵距離上一次靜止的時間間距 */
timePeriod = (long)timeNow.getTime() - (long)lastUpdateTime.getTime();
lastUpdateTime.setTime(timeNow.getTime());
}
public void resetScreenSaverListener()
{
/* 移除現有的Runnable */
mHandler01.removeCallbacks(mTasks01);
mHandler02.removeCallbacks(mTasks02);
// /* 取得按下按鍵事件時的系統Time Millis */
// Date timeNow = new Date(System.currentTimeMillis());
// /* 重新計算按下按鍵距離上一次靜止的時間間距 */
// timePeriod = (long)timeNow.getTime() - (long)lastUpdateTime.getTime();
// lastUpdateTime.setTime(timeNow.getTime());
updateUserActionTime();
/* for Runnable2,取消螢幕保護 */
bIfRunScreenSaver = false;
/* 重置Runnable1與Runnable1的Counter */
intCounter1 = 0;
intCounter2 = 0;
/* 恢復原來的Layout Visible*/
recoverOriginalLayout();
/* 重新postDelayed()新的Runnable */
mHandler01.postDelayed(mTasks01, intervalKeypadeSaver);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if(bIfRunScreenSaver==true && keyCode!=KeyEvent.KEYCODE_BACK)
{
/* 當螢幕保護程式正在執行中,觸動解除螢幕保護程式 */
onUserWakeUpEvent();
}
else
{
/* 更新User未觸動手機的時間戳記 */
updateUserActionTime();
}
return super.onKeyDown(keyCode, event);
} @Override
public boolean onTouchEvent(MotionEvent event)
{
// TODO Auto-generated method stub
if(bIfRunScreenSaver==true)
{
/* 當螢幕保護程式正在執行中,觸動解除螢幕保護程式 */
onUserWakeUpEvent();
}
else
{
/* 更新User未觸動手機的時間戳記 */
updateUserActionTime();
}
// return super.onTouchEvent(event);
return false;
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
mHandler01.postDelayed(mTasks01, intervalKeypadeSaver);
super.onResume();
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
try
{
/* 移除執行中的執行緒 */
mHandler01.removeCallbacks(mTasks01);
mHandler02.removeCallbacks(mTasks02);
mHandler03.removeCallbacks(mTasks03);
mHandler04.removeCallbacks(mTasks04);
}
catch(Exception e)
{
e.printStackTrace();
}
super.onPause();
}
}
private void recoverOriginalLayout()
{
mTextView01.setVisibility(View.VISIBLE);
mEditText01.setVisibility(View.VISIBLE);
mImageView01.setVisibility(View.GONE);
}
/* 隱藏原有應用程式裡的版面配置元件 */
private void hideOriginalLayout()
{
/* 將欲隱藏的Widget寫在此 */
mTextView01.setVisibility(View.INVISIBLE);
mEditText01.setVisibility(View.INVISIBLE);
}
/* 開始ScreenSaver */
private void showScreenSaver()
{
/* 螢幕保護之後要做的事件寫在此*/
if(intDrawable>4)
{
intDrawable = 0;
}
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
Bitmap bmp=BitmapFactory.decodeResource(getResources(), screenDrawable[intDrawable]);
/* Matrix比例 */
float scaleWidth = ((float) screenWidth) / bmp.getWidth();
float scaleHeight = ((float) screenHeight) / bmp.getHeight() ;
Matrix matrix = new Matrix();
/* 使用Matrix.postScale設定維度ReSize */
matrix.postScale(scaleWidth, scaleHeight);
/* ReSize圖檔至螢幕解析度 */
Bitmap resizedBitmap = Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true);
BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap);
mImageView01.setImageDrawable(myNewBitmapDrawable);
/* 使ImageView可見 */
mImageView01.setVisibility(View.VISIBLE);
/* 每間隔設定秒數置換圖片ID,於下一個runnable2才會生效 */
if(intCounter2%intSecondsToChange==0)
{
intDrawable++;
}
}
public void onUserWakeUpEvent()
{
if(bIfRunScreenSaver==true)
{
try
{
/* LayoutInflater.from取得此Activity的context */
mInflater01 = LayoutInflater.from(EX07_03.this);
/* 建立解鎖密碼使用View的Layout */
mView01 = mInflater01.inflate(R.layout.securescreen, null);
/* 於對話方塊中唯一的EditText等待輸入解鎖密碼 */
mEditText02 = (EditText) mView01.findViewById(R.id.myEditText2);
/* 建立AlertDialog */
new AlertDialog.Builder(this)
.setView(mView01)
.setPositiveButton("OK",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
/* 比對輸入的密碼與原Activity裡的設定是否相符 */
if(mEditText01.getText().toString().equals(mEditText02.getText().toString()))
{
/* 當密碼正確才真的解鎖螢幕保護裝置 */
resetScreenSaverListener();
}
}
}).show();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public void updateUserActionTime()
{
/* 取得按下按鍵事件時的系統Time Millis */
Date timeNow = new Date(System.currentTimeMillis());
/* 重新計算按下按鍵距離上一次靜止的時間間距 */
timePeriod = (long)timeNow.getTime() - (long)lastUpdateTime.getTime();
lastUpdateTime.setTime(timeNow.getTime());
}
public void resetScreenSaverListener()
{
/* 移除現有的Runnable */
mHandler01.removeCallbacks(mTasks01);
mHandler02.removeCallbacks(mTasks02);
// /* 取得按下按鍵事件時的系統Time Millis */
// Date timeNow = new Date(System.currentTimeMillis());
// /* 重新計算按下按鍵距離上一次靜止的時間間距 */
// timePeriod = (long)timeNow.getTime() - (long)lastUpdateTime.getTime();
// lastUpdateTime.setTime(timeNow.getTime());
updateUserActionTime();
/* for Runnable2,取消螢幕保護 */
bIfRunScreenSaver = false;
/* 重置Runnable1與Runnable1的Counter */
intCounter1 = 0;
intCounter2 = 0;
/* 恢復原來的Layout Visible*/
recoverOriginalLayout();
/* 重新postDelayed()新的Runnable */
mHandler01.postDelayed(mTasks01, intervalKeypadeSaver);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if(bIfRunScreenSaver==true && keyCode!=KeyEvent.KEYCODE_BACK)
{
/* 當螢幕保護程式正在執行中,觸動解除螢幕保護程式 */
onUserWakeUpEvent();
}
else
{
/* 更新User未觸動手機的時間戳記 */
updateUserActionTime();
}
return super.onKeyDown(keyCode, event);
} @Override
public boolean onTouchEvent(MotionEvent event)
{
// TODO Auto-generated method stub
if(bIfRunScreenSaver==true)
{
/* 當螢幕保護程式正在執行中,觸動解除螢幕保護程式 */
onUserWakeUpEvent();
}
else
{
/* 更新User未觸動手機的時間戳記 */
updateUserActionTime();
}
// return super.onTouchEvent(event);
return false;
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
mHandler01.postDelayed(mTasks01, intervalKeypadeSaver);
super.onResume();
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
try
{
/* 移除執行中的執行緒 */
mHandler01.removeCallbacks(mTasks01);
mHandler02.removeCallbacks(mTasks02);
mHandler03.removeCallbacks(mTasks03);
mHandler04.removeCallbacks(mTasks04);
}
catch(Exception e)
{
e.printStackTrace();
}
super.onPause();
}
}
肯定的啊
onUserWakeUpEvent里, mInflater01 = LayoutInflater.from(EX07_03.this);
/* 建立解鎖密碼使用View的Layout */
mView01 = mInflater01.inflate(R.layout.securescreen, null);//这个layout里肯定有mEditText01和mEditText02 了
/* 於對話方塊中唯一的EditText等待輸入解鎖密碼 */
mEditText02 = (EditText) mView01.findViewById(R.id.myEditText2);
/* 建立AlertDialog */
new AlertDialog.Builder(this)
.setView(mView01)//这里set了就会显示mView01整个view了,里面应该包括了那两个edit
.setPositiveButton("OK",
new DialogInterface.OnClickListener()
//...
好像是因为在调用mView01的时候,因为存在于同一个方法中,所以导致该view出现两次???这么解释不大对,但是感觉上是这个思路。
继续求教达人给出一个明确的解释。还得好好研究一下layoutInflater.inflate
mInflater01 = LayoutInflater.from(EX07_03.this);
/* 建立解鎖密碼使用View的Layout */
mView01 = mInflater01.inflate(R.layout.securescreen, null);
/* 於對話方塊中唯一的EditText等待輸入解鎖密碼 */
mEditText02 = (EditText) mView01.findViewById(R.id.myEditText2);