Android 推门效果

public class MainActivity extends RelativeLayout{

    private Scroller scroller;
    private Context context;
    private int width;
    private int height;
    private ImageView imageView;

    private int mLastDownY = 0;  

    private int mCurryY;  

    private int mDelY;  

    private boolean mCloseFlag = false;  

    public Main_skip(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        initView();
    }

    private void initView(){
        // 这个Interpolator你可以设置别的 我这里选择的是有弹跳效果的Interpolator
        BounceInterpolator interpolator = new BounceInterpolator();
        scroller = new Scroller(context,interpolator);

        WindowManager manager = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics metrics = new DisplayMetrics();
        manager.getDefaultDisplay().getMetrics(metrics);
        width = metrics.widthPixels;
        height = metrics.heightPixels;

        // 这里你一定要设置成透明背景,不然会影响你看到底层布局
        this.setBackgroundColor(Color.argb(0, 0, 0, 0));
        imageView = new ImageView(context);
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT
                , LayoutParams.MATCH_PARENT);
        imageView.setLayoutParams(params);
        imageView.setScaleType(ScaleType.FIT_XY);
        imageView.setImageResource(R.drawable.a);
        addView(imageView);

    }

    public void setBGimg(int resID){
        imageView.setImageResource(resID);
    }

    public void setBGimg(Drawable drawable){
        imageView.setImageDrawable(drawable);
    }

    // 推动门的动画
    public void setAnimation(int startY, int dy, int duration){
        scroller.startScroll(0, startY, 0, dy, duration);
        invalidate();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mLastDownY = (int) event.getY();
            System.err.println("ACTION_DOWN=" + mLastDownY);
            return true;
        case MotionEvent.ACTION_MOVE:
            mCurryY = (int) event.getY();
            System.err.println("ACTION_MOVE=" + mCurryY);
            mDelY = mCurryY - mLastDownY;
            if(mDelY < 0 ){
                scrollTo(0, -mDelY);
                 System.err.println("-------------  " + mDelY);
            }
            break;
        case MotionEvent.ACTION_UP:
            mCurryY = (int) event.getY();
            mDelY = mCurryY - mLastDownY;
            if(mDelY < 0){
                if(Math.abs(mDelY)>height/2){
                    setAnimation(this.getScrollY(), height, 450);
                    mCloseFlag = true;
                }else{
                    setAnimation(this.getScrollY(), -this.getScrollY(), 1000);
                }
            }
            break;

        default:
            break;
        }
        return super.onTouchEvent(event);
    }

    @Override
    public void computeScroll() {
        if(scroller.computeScrollOffset()){
            scrollTo(scroller.getCurrX(), scroller.getCurrY());
            // 不要忘记更新界面
            postInvalidate();
        }else {
            if (mCloseFlag) {
                this.setVisibility(View.GONE);
            }
        }
        super.computeScroll();
    }

}
时间: 2024-11-08 00:41:24

Android 推门效果的相关文章

Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源代码

在android学习中,动作交互是软件中重要的一部分.当中的Scroller就是提供了拖动效果的类,在网上.比方说一些Launcher实现滑屏都能够通过这个类去实现.以下要说的就是上次Scroller类学习的后的实践了. 假设你还不了解Scroller类,那请先点击:Android 界面滑动实现---Scroller类 从源代码和开发文档中学习(让你的布局动起来) 了解之后再阅读下面内容.你会发现原来实现起来非常easy. 之前说到过.在广泛使用的側边滑动导航开源库 --SlidingLayer

【Android】基于XMAPP协议实现Android推送服务(亲测可用)

一.PC端直接运行服务器 1. 进入目录androidpn-server-0.5.0\bin,双击run.bat 2. 浏览器输入网址:http://127.0.0.1:7070/index.do 3. 将androidpn-client导入到Eclipse 4. 配置好目标平台,打开androidpn-client/res/raw/androidpn.properties文件,进行如下修改 apiKey=1234567890 xmppHost=10.0.2.2(模拟器使用该地址,真机模拟的话,

Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码

在android学习中,动作交互是软件中重要的一部分,其中的Scroller就是提供了拖动效果的类,在网上,比如说一些Launcher实现滑屏都可以通过这个类去实现.下面要说的就是上次Scroller类学习的后的实践了. 如果你还不了解Scroller类,那请先点击:Android 界面滑动实现---Scroller类 从源码和开发文档中学习(让你的布局动起来) 了解之后再阅读以下内容,你会发现原来实现起来很简单. 之前说到过,在广泛使用的侧边滑动导航开源库 --SlidingLayer其实就是

Android 导航条效果实现(六) TabLayout+ViewPager+Fragment

TabLayout 一.继承结构 public class TabLayout extends HorizontalScrollView java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.HorizontalScrollView ? android.support.design.widget.TabLayout 二.TabLayou

MQTT与Mosquitto服务器搭建以及Android推送(一)MQTT简介

文章钢要: 对MQTT协议有一定认识 对MQTT运行原理有一定了解 一.什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议. 国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议.其中Sohu,Cmstop手机客户端中均有使用到MQTT作为消息推送消息. MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息

Android自定义弹窗效果

Android的弹窗效果有很多种,就最简单而言,就可以调用一个AlertDialog弹窗显示,可是要自定义弹窗效果有以下这种方法,就我个人而言感觉挺方便的,适用性也挺广的. 首先先简单写个AlertDialog的使用 public void showDialog(){ AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("提示") .setMessage(getResources().getString("

Android推送服务开发

由于公司之前使用的手机客户端推送服务是极光推送,给公司造成一年几十万的服务费,因此,公司决定开发自己的一套推送服务,初步的技术选型是: 服务端:netty4 关于netty框架在我的下面的博客里面我整理了相关资料,本来还有一些关于mina的由于时间原因暂时没整理出来. 为了便于自己测试,自己动手实现了如何使用netty完成服务端消息推送以及在Android客户端如何将接受到的信息显示在通知栏,整体思路大概是这样的: 服务端使用netty框架开启基于TCP监听服务. 客户端发起TCP连接(不关闭,

devexpress显示缓冲滚动条与实现类似QQ消息推送效果

1.一般在项目中处理大数据,或者查询大量数据时,耗时会很长,这个时候缓冲条是必不可少的.这里展示一个devexpress不错的缓冲条,如图所示: 使用到了控件splashScreenManager,运行代码如下: splashScreenManager1.ShowWaitForm(); Thread.Sleep(5000);//需长时间运行的代码,这里用线程控制运行时间代替 splashScreenManager1.CloseWaitForm(); 2.有时候一些消息推送功能也能给一个系统加分不

服务器向Android推送的相关知识和解决方案

在Android中实现推送方式的基础知识及相关解决方案:推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识: 在移动互联网时代以前的手机,如果有事情发生需要通