zoukankan      html  css  js  c++  java
  • 实现多楼层,每个楼层多房间,上下拖动切换楼层,左右拖动查看其他房间

    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> 




  • 相关阅读:
    了解AOP
    Struts2 拦截器与Spring AOP的区别
    Spring核心技术之IoC和AOP
    产品经理历险记-2-如何把需求聊得更细
    产品经理历险记-1-记录一次事故
    C# 使用 Lotus notes 公共邮箱发送邮件
    设计模式 5/23 原型模式
    设计模式 4/23 建造者模式
    设计模式 3/23 抽象工厂模式
    设计模式 2/23 工厂模式(二)
  • 原文地址:https://www.cnblogs.com/james1207/p/3253517.html
Copyright © 2011-2022 走看看