CurtainActivity 類:
實現當前Activity 窗戶開啟關閉操作
package temp.com;import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast; public class CurtainActivity extends Activity { private ImageView windowImageView; //當前操作的窗戶 private int thisWindow=1; private CurtainOperationView curtainView; private Button okButton; private Button openButton; private Button closeButton; private Button returnButton; private Toast toast; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.curtainview); final LinearLayout linearLayoutCurtain = (LinearLayout) findViewById(R.id.linearLayoutCurtain); // 擷取窗戶控制項 windowImageView = (ImageView) findViewById(R.id.windowImageView); //擷取當前操作的窗戶 getThisWindow();//返回當前窗戶的ID 1表示左上、2表示右上、3表示左下、4表示右下 // 設定窗戶開始介面 setWindowFace(); //curtain15 開啟;curtain1 為關閉 //根據窗帘的不同狀態 設定動畫 setCurtainView(true); openButton = (Button) findViewById(R.id.openButton); openButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("監聽到將要 開啟窗戶"); if (!Values.windowIsOpen[thisWindow]) { // 更新窗戶狀態 updateWindowState(true); setCurtainView(false);// 建立並設定窗戶動畫顯示方式curtainView linearLayoutCurtain.removeAllViews(); linearLayoutCurtain.addView(curtainView); curtainView.show(true); }else { toast = Toast.makeText(getApplicationContext(),"窗戶已經開啟了!", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.setDuration(400); toast.show(); } } }); closeButton = (Button) findViewById(R.id.closeButton); closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("監聽到將要 關閉窗戶"); if (Values.windowIsOpen[thisWindow]) { // 更新窗戶狀態 updateWindowState(false); setCurtainView(true);// 建立並設定窗戶動畫顯示方式curtainView linearLayoutCurtain.removeAllViews(); linearLayoutCurtain.addView(curtainView); curtainView.show(true); }else { toast = Toast.makeText(getApplicationContext(), "窗戶已經關上了!", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.setDuration(400); toast.show(); } } }); okButton = (Button) findViewById(R.id.okButton); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("監聽到確定按鈕"); if (curtainView != null) { //finish(); } } }); returnButton = (Button) findViewById(R.id.returnButton); returnButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("監聽返回按鈕"); //finish(); } }); } //根據窗帘的不同狀態 設定動畫 //真 為開 假為閉 public void setCurtainView(boolean isOpen) { curtainView = new CurtainOperationView(this, isOpen); } public void updateWindowState(boolean blean) { Values.windowIsOpen[thisWindow]=blean; } //擷取當前操作的窗戶 //返回當前窗戶的ID 1表示左上、2表示右上、3表示左下、4表示右下 public int getThisWindow(){ thisWindow=Values.thisWindow-1; System.out.println("This Window is "+thisWindow); if(Values.windowIsOpen[thisWindow]) System.out.println("窗戶已開啟"); else { System.out.println("窗戶已關閉"); }; return thisWindow; } // 設定窗戶開始介面 //curtain15 開啟;curtain1 為關閉 public void setWindowFace(){ if(Values.windowIsOpen[thisWindow]) windowImageView.setImageResource(R.drawable.curtain15); else { windowImageView.setImageResource(R.drawable.curtain1); } } }
CurtainOperationView 類:
package temp.com; import android.content.Context;import android.graphics.Canvas;import android.graphics.drawable.AnimationDrawable;import android.graphics.drawable.Drawable;import android.view.View; public class CurtainOperationView extends View{ /* 定義AnimationDrawable動畫 */ private AnimationDrawable frameAnimation = null; Context mContext = null; /* 定義一個Drawable對象 */ Drawable mBitAnimation = null; // public CurtainOperationView(Context context,boolean isOpen) { super(context); mContext = context; /* 執行個體化AnimationDrawable對象 */ frameAnimation = new AnimationDrawable(); /* 裝載資源 */ //這裡用一個迴圈了裝載所有名字類似的資源 //如“curtain1.......15.png”的圖片 if(isOpen){//窗戶為開啟狀態 這裡是關閉動畫 for (int i = 15; i >= 1; i--) { int id = getResources().getIdentifier("curtain" + i, "drawable", mContext.getPackageName()); mBitAnimation = getResources().getDrawable(id); /* 為動畫添加一幀 */ //參數mBitAnimation是該幀的圖片 //參數300是該幀顯示的時間,按毫秒計算 frameAnimation.addFrame(mBitAnimation, 300); } }else if (!isOpen) {//窗戶為關閉狀態 這裡是開啟動畫 for (int i = 1; i <= 15; i++) { int id = getResources().getIdentifier("curtain" + i, "drawable", mContext.getPackageName()); mBitAnimation = getResources().getDrawable(id); /* 為動畫添加一幀 */ //參數mBitAnimation是該幀的圖片 //參數500是該幀顯示的時間,按毫秒計算 frameAnimation.addFrame(mBitAnimation, 300); } } /* 設定播放模式是否迴圈false表示迴圈而true表示不迴圈 */ frameAnimation.setOneShot( true ); /* 設定本類將要顯示這個動畫 */ this.setBackgroundDrawable(frameAnimation); // frameAnimation.setVisible(true, false); /* 開始播放動畫 */ frameAnimation.stop(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); } public void show(boolean ff) { if(ff) /* 開始播放動畫 */ frameAnimation.start(); } }
Values 類:
package temp.com;public class Values { public static int thisWindow=1;//當前操作的控制項的ID //對應九個窗帘,是否開啟 true 表示窗帘是開啟的 false 表示窗帘是關閉的 public static boolean windowIsOpen[]={ true, //窗帘1 true, //窗帘2 true, //窗帘3 true, //窗帘4 true, //窗帘5 true, //窗帘6 true, //窗帘7 true, //窗帘8 true //窗帘9 }; }
curtainview.xml 介面布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/curtain" android:background="#000000"> <LinearLayout android:id="@+id/linearLayoutCurtain" android:layout_width="320dip" android:layout_height="320dip"> <ImageView android:id="@+id/windowImageView" android:layout_width="320dip" android:layout_height="320dip" /> </LinearLayout> <RelativeLayout android:id="@+id/linearLayoutCurtainTheSecond" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/openButton" android:layout_width="80dip" android:layout_height="wrap_content" android:text="開啟窗戶" android:layout_alignTop="@id/linearLayoutCurtainTheSecond" android:layout_alignLeft="@id/linearLayoutCurtainTheSecond" /> <Button android:id="@+id/closeButton" android:layout_width="80dip" android:layout_height="wrap_content" android:text="關閉窗戶" android:layout_toRightOf="@id/openButton" android:layout_alignTop="@id/linearLayoutCurtainTheSecond" /> <Button android:id="@+id/okButton" android:layout_width="80dip" android:layout_height="wrap_content" android:text="確定" android:layout_toRightOf="@id/closeButton" android:layout_alignTop="@id/linearLayoutCurtainTheSecond" /> <Button android:id="@+id/returnButton" android:layout_width="80dip" android:layout_height="wrap_content" android:text="返回" android:layout_toRightOf="@id/okButton" android:layout_alignTop="@id/linearLayoutCurtainTheSecond" /> </RelativeLayout></LinearLayout> <!-- android:layout_above 將該 控制項放在給定ID之上 android:layout_below 之下 android:layout_toLeftOf 本身的右邊緣與另外的左邊對齊 android:layout_toRightOf 左邊 右邊 android:layout_alignBaseline baseline對齊 android:layout_alignBotton 底部與底部對齊 android:layout_alignLeft 左邊與左邊對齊 android:layout_alignRight 右邊與右邊對齊 android:layout_alignTop 頂部與頂部對齊 android:layout_alignParentBottom 為真時,底部與父控制項的底部對齊 android:layout_alignParentLeft android:layout_alignParentRight android:layout_alignParentTop android:layout_centerHorizontal 為真時,被置於水平方向中央 android:layout_centerInParent android:layout_centerVertical 為真時,被置於垂直方向中央 -->
窗戶開啟時顯示:
窗戶正在關閉中顯示:
窗戶已關閉時顯示:
//源碼下載:(源碼上傳時丟失)