Frame動畫+按鍵監聽(實現窗戶開啟關閉操作)

來源:互聯網
上載者:User

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 為真時,被置於垂直方向中央    -->

窗戶開啟時顯示:

窗戶正在關閉中顯示:

窗戶已關閉時顯示:

 //源碼下載:(源碼上傳時丟失)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.