Frame动画+按键监听(实现窗户打开关闭操作)

/*

实现当前Activity 窗户打开关闭操作

*/

//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 为真时,被置于垂直方向中央
-->

窗户打开时

窗户正在关闭中

窗户已关闭

//源码下载

http://download.csdn.net/source/3222668

如果没有资源分的或没有CSDN号的可以留邮箱,或发邮件至254443233@qq.com;本人免费放送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值