FloorObject 楼层类继承于ViewFlipper,上下可以切换楼层,左右可以拉动查看每个楼层内的房间。大伙可以直接把这个类拿去修改一下使用。RoomSmallImage 类现在没写啥东西,只设置了一个背景而已,自己根据实际情况修改。
/****************FloorObject .java********************************************************/
package jtx.FloorAndRoom;
import jtx.theEdge.R;
import android.content.Context;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.animation.AnimationUtils;
import android.widget.HorizontalScrollView;
import android.widget.RelativeLayout;
import android.widget.ViewFlipper;
public class FloorObject extends ViewFlipper{
private int selectedPosition;
private Context mContext;
public FloorObject(Context context) {
super(context);
mContext = context;
getContentView();
selectedPosition = 0;
}
/**每个楼层具体内容类,继承于HorizontalScrollView,实现手势接口*/
private class FloorScrollView extends HorizontalScrollView implements OnGestureListener{
private GestureDetector gestureDetector;
public FloorScrollView(Context context) {
super(context);
gestureDetector = new GestureDetector(this);
this.setFadingEdgeLength(0);//设置边缘不模糊,即模糊长度为0
}
public boolean onTouchEvent(MotionEvent event) {
this.gestureDetector.onTouchEvent(event);
return true;
}
public boolean onDown(MotionEvent arg0) {
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 50) {
//向上
selectedPosition = selectedPosition + 1 < 5 ? (selectedPosition + 1) : 0;
getContentView();
FloorObject.this.setInAnimation(AnimationUtils.loadAnimation(mContext,R.anim.push_bottom_in));
FloorObject.this.setOutAnimation(AnimationUtils.loadAnimation(mContext,R.anim.push_top_out));
FloorObject.this.showNext();
FloorObject.this.removeViewAt(0);
} else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 50) {
//向下
selectedPosition = selectedPosition > 0 ? (selectedPosition - 1) : (5 - 1);
getContentView();
FloorObject.this.setInAnimation(AnimationUtils.loadAnimation(mContext,R.anim.push_top_in));
FloorObject.this.setOutAnimation(AnimationUtils.loadAnimation(mContext,R.anim.push_bottom_out));
FloorObject.this.showNext();
FloorObject.this.removeViewAt(0);
}
return true;
}
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
if(Math.abs(velocityY) <= 50)
this.scrollBy((int)velocityX,(int)velocityY);
return true;
}
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
}
/**加载每个楼层的具体内容*/
private RelativeLayout getContentView() {
//添加一个FloorScrollView,继承于HorizontalScrollView
FloorScrollView scrollView = new FloorScrollView(mContext);
LayoutParams lp = new LayoutParams(400, 300);
this.addView(scrollView,lp);
//在scrollView中添加一个相对布局RelativeLayout
RelativeLayout rrlContentView = new RelativeLayout(mContext);
lp = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
rrlContentView.setBackgroundColor(0xff000000);
scrollView.addView(rrlContentView,lp);
//在 相对布局中添加当前楼层的房间图片
for(int i=0 ;i<10 ;i++)
{
RoomSmallImage roomSmallImage = new RoomSmallImage(mContext,i);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(80,60);
rlp.leftMargin = 20+ 100*i;
rrlContentView.addView(roomSmallImage,rlp);
}
return rrlContentView;
}
}
/****************RoomSmallImage .java********************************************************/
package jtx.FloorAndRoom;
import android.content.Context;
public class RoomSmallImage extends RoomSmallImageBaseObject{
/**
* 首页中楼层中的房间小图片
* @param context
* @param roomCode 房间码
*/
public RoomSmallImage(Context context,int roomCode) {
super(context);
this.setBackgroundColor(0xff555555);
// TODO Auto-generated constructor stub
}
}
/*********************push_bottom_in.xml***************************************/
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="750"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
/*********************push_bottom_out.xml***************************************/
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="750"
android:fromYDelta="0"
android:toYDelta="100%p" />
</set>
/*********************push_top_in.xml***************************************/
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="750"
android:fromYDelta="-100%p"
android:toYDelta="0" />
</set>
/*********************push_top_out.xml***************************************/
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="750"
android:fromYDelta="0"
android:toYDelta="-100%p" />
</set>