在Activiey 中更改 并刷新Layout(布局)中的控件(ImageView)的显示

来源:互联网 发布:unity3d金属材质球 编辑:程序博客网 时间:2024/05/03 18:59

DoorActivity 类:程序主界面/入口

里面有自定义Toast的显示位置,代码如下:

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 DoorActivity extends Activity {//private LayoutInflater inflater = null;private ImageView doorImageView;//当前操作的门 private int thisWindow=1;private Button okDoorButton;private Button openDoorButton;private Button closeDoorButton;private Toast toast;private DoorOperationView doorOperationView;private LinearLayout linearLayoutDoor;@Overridepublic void onCreate(Bundle savedInstanceState) {//inflater = LayoutInflater.from(this);super.onCreate(savedInstanceState);//Thread.currentThread().start();setContentView(R.layout.doorview);linearLayoutDoor = (LinearLayout) findViewById(R.id.linearLayoutDoor);// 获取门控件doorImageView = (ImageView) findViewById(R.id.doorImageView);//获取当前操作的门       getThisDoor();// 设置门开始界面setDoorFace();  // dooropen 打开;doopclose 为关闭doorOperationView =new DoorOperationView(DoorActivity.this,Values.doorIsOpen[thisWindow]);openDoorButton = (Button) DoorActivity.this.findViewById(R.id.openDoorButton);openDoorButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("监听到将要  打开门");if (!Values.doorIsOpen[thisWindow]) {// 更新门状态updateDoorState(true);linearLayoutDoor.removeAllViews();linearLayoutDoor.addView(doorOperationView);}else {toast = Toast.makeText(getApplicationContext(),"门已经打开了!", Toast.LENGTH_LONG);   toast.setGravity(Gravity.CENTER, 0, 0);   toast.setDuration(400);   toast.show();}}});closeDoorButton = (Button) DoorActivity.this.findViewById(R.id.closeDoorButton);closeDoorButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("监听到将要 关闭门");if (Values.doorIsOpen[thisWindow]) {// 更新门状态updateDoorState(false);linearLayoutDoor.removeAllViews();linearLayoutDoor.addView(doorOperationView);}else {toast = Toast.makeText(getApplicationContext(),     "门已经关上了!", Toast.LENGTH_LONG);   toast.setGravity(Gravity.CENTER, 0, 0);   toast.setDuration(400);   toast.show();}}});/*okDoorButton = (Button) DoorActivity.this.findViewById(R.id.okDoorButton);okDoorButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("监听到确定按钮");if (doorOperationView != null) {finish();}}});*/}public void updateDoorState(boolean blean) {Values.doorIsOpen[thisWindow]=blean;doorOperationView =new DoorOperationView(DoorActivity.this,Values.doorIsOpen[thisWindow]);}//获取当前操作的门 public int getThisDoor(){thisWindow=Values.thisWindow-1;System.out.println("This Door is "+thisWindow);if(Values.doorIsOpen[thisWindow])System.out.println("门已打开");else {System.out.println("门已关闭");};return thisWindow;}// 设置门开始界面public void setDoorFace(){if(Values.doorIsOpen[thisWindow])doorImageView.setImageResource(R.drawable.dooropen);else {doorImageView.setImageResource(R.drawable.doorclose);}}}
DoorOperationView类:

负责图片的资源等说明与操作,代码如下:

package temp.com;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.view.View;public class DoorOperationView extends View{ContextmContext= null;Bitmap bitmap=null;/* 定义一个Drawable对象 */DrawablemBitDrawable= null;boolean isOpen=false;private Paint paintNormal = null;// 小画笔public DoorOperationView(DoorActivity doorActivity,boolean isOpen){super(doorActivity);this.isOpen=isOpen;paintNormal = new Paint();paintNormal.setAntiAlias(true);paintNormal.setStyle(Paint.Style.STROKE);paintNormal.setColor(Color.BLACK);paintNormal.setStrokeWidth(1);if(isOpen){//窗户为打开状态  这里是关闭动画bitmap = ((BitmapDrawable)doorActivity.getResources().getDrawable(R.drawable.dooropen)).getBitmap();}else if (!isOpen) {//窗户为关闭状态   这里是打开动画bitmap = ((BitmapDrawable)doorActivity.getResources().getDrawable(R.drawable.doorclose)).getBitmap();}}public void onDraw(Canvas canvas){super.onDraw(canvas);canvas.drawBitmap(bitmap, 0, 0, paintNormal);}}

Values 类:临时存放的值。

代码如下:

 //Valuespackage temp.com;public class Values {    public static int thisWindow=1;//当前操作的控件的ID                //对应七扇门,是否打开 true 表示门是打开的     false 表示门是关闭的    public static boolean doorIsOpen[]={                                            true,    //门1                                             true,    //门2                                            true,    //门3                                            true,    //门4                                            true,    //门5                                            true,    //门6                                            true,    //门7                                        };        }

doorview.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/DoorView"android:background="#000000"><LinearLayout android:id="@+id/linearLayoutDoor"android:layout_width="320dip" android:layout_height="320dip"><ImageView android:id="@+id/doorImageView"android:layout_width="320dip" android:layout_height="320dip" /></LinearLayout><RelativeLayout android:id="@+id/linearLayoutDoorTheSecond"android:layout_width="wrap_content" android:layout_height="wrap_content"><Button android:id="@+id/openDoorButton" android:layout_width="80dip"android:layout_height="wrap_content" android:text="开门"android:layout_alignTop="@id/linearLayoutDoorTheSecond"android:layout_alignLeft="@id/linearLayoutDoorTheSecond" /><Button android:id="@+id/closeDoorButton" android:layout_width="80dip"android:layout_height="wrap_content" android:text="关门"android:layout_toRightOf="@id/openDoorButton" android:layout_alignTop="@id/linearLayoutDoorTheSecond" /><Button android:id="@+id/okDoorButton" android:layout_width="80dip"android:layout_height="wrap_content" android:text="确定"android:layout_toRightOf="@id/closeDoorButton" android:layout_alignTop="@id/linearLayoutDoorTheSecond" /></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_alignParentRightandroid:layout_alignParentTop android:layout_centerHorizontal为真时,被置于水平方向中央 android:layout_centerInParentandroid:layout_centerVertical 为真时,被置于垂直方向中央-->

程序运行状态:

1)点击打开按钮时显示如图:

2)点击关闭按钮时显示如图:

//源码下载:http://download.csdn.net/source/3222583

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