Frame动画+按键监听(实现窗户打开关闭操作)
来源:互联网 发布:mac可以玩的网游 编辑:程序博客网 时间:2024/04/28 16:38
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 为真时,被置于垂直方向中央 -->
窗户打开时显示:
窗户正在关闭中显示:
窗户已关闭时显示:
//源码下载:(源码上传时丢失)
- Frame动画+按键监听(实现窗户打开关闭操作)
- android中frame动画监听
- 安卓监听输入法键盘打开关闭(兼容虚拟按键栏的手机,比如华为)
- android 逐帧(Frame)动画的实现
- frame动画的实现
- frame动画的实现
- 演示Frame界面展开与关闭动画
- 按键监听实现Fragment跳转
- Frame Animation动画的实现
- 逐帧(Frame)动画
- 帧(Frame)动画
- 动画效果打开关闭层
- Android Activity打开关闭动画
- 三种动画效果(Frame, View, Property)实现
- java调用vbs,实现打开关闭excel操作小示例
- 帧动画(Frame By Frame)
- android 监听 soft keyboard打开与关闭
- bootstrap-model(对话框)打开关闭事件监听
- linux命令终极系列(grep)转
- 7 Habits of Highly Ineffective People By Henrik Edberg
- DirectShow FAQ翻译
- 杭电1008
- asmlinkage
- Frame动画+按键监听(实现窗户打开关闭操作)
- 卡内基 主动地金科玉律
- tomcat平台老是出现Java heap space
- ASP.NET中常用的三十三种代码 1
- 关于linux的一些东西(1)
- ASP.NET中常用的三十三种代码 2
- ADS1.2及Jlink安装步骤及参数设定
- 道道道
- 分层的疑惑,再此在留标记