zoukankan      html  css  js  c++  java
  • Test

    	private static final String LOG_TAG = "SlideActivity";
    	/** android.R.id.content 这个View */
    	private View mContentView = null;
    	/** 一个activity的主View */
    	private View mDecoreView = null;
    	//记录滑动的开始的位置
    	private int mDownPos = -1;
    	//记录滑动手指的id
    	private int mPointerId = -1;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		//这里,请注意,需要把windowbackground设置为透明,并且android:windowIsTranslucent置为true.
    		//这样,你才会在滑动的时候,看到下面Activity的界面。请参看AndroidManifest.xml这个Activity的style.
    		//而且,在开发的过程中,发现windowbackgournd设置为@null的,滑动会花屏,这个原因还没有找到。
    		this.setContentView(R.layout.slide_activity);
    		getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    		Log.i(LOG_TAG, "onCreate");
    	}
    
    	@Override
    	protected void onStart() {
    		super.onStart();
    		Log.i(LOG_TAG, "onStart");
    	}
    
    	@Override
    	protected void onRestart() {
    		super.onRestart();
    		Log.i(LOG_TAG, "onRestart");
    	}
    	@Override
    	protected void onResume() {
    		super.onResume();
    		//拿到decoreView
    		mDecoreView = this.getWindow().getDecorView();
    		//拿到contentView
    		mContentView = mDecoreView.findViewById(android.R.id.content);
    		//监听contentView上面的Touch事件
    		mContentView.setOnTouchListener(new OnTouchListener(){
    
    			@Override
    			public boolean onTouch(View v, MotionEvent event) {
    				Log.i(LOG_TAG, "result:" + event.getActionMasked());
    				switch (event.getActionMasked()) {
    				case MotionEvent.ACTION_DOWN: {
    					//分配记录滑动的初始位置,和PointerId。
    					mDownPos = (int) event.getRawY();
    					mPointerId = event.getPointerId(event.getActionIndex());
    					Log.e(LOG_TAG, "mDownPos:" + event.getY());
    					break;
    				}
    				case MotionEvent.ACTION_MOVE: {
    					//滑动contentView 到  手指当前位置到初始位置的位移。
    					int currentPos = (int) event.getRawY();
    					v.scrollTo(0, mDownPos - currentPos);
    					v.invalidate();
    					// use margin
    					// FrameLayout.LayoutParams flp =
    					// (FrameLayout.LayoutParams)mContentView.getLayoutParams();
    					// flp.bottomMargin = flp.bottomMargin - distance;
    					// flp.topMargin = flp.topMargin + distance;
    					// flp.height = mHeight - (mDownPos - currentPos);
    					// mContentView.offsetTopAndBottom(-distance);
    					// mContentView.setLayoutParams(flp);
    					// mDecoreView.invalidate();
    
    					// move windows?
    					// WindowManager.LayoutParams wlp = mWindow.getAttributes();
    					// wlp.y = currentPos - mDownPos;
    					// mWindow.setAttributes(wlp);
    
    					//
    					// WindowManager.LayoutParams wlp =
    					// (WindowManager.LayoutParams)mDecoreView.getLayoutParams();
    					// Log.i(LOG_TAG, "posX:"+ wlp.x + " posY:"+wlp.y);
    					// wlp.y = currentPos - mDownPos;
    					// //wlp.height = mHeight;
    					// Log.i(LOG_TAG, "posY change to "+wlp.y);
    					// //wlp.height = 360;
    					// this.getWindowManager().updateViewLayout(mDecoreView,
    					// wlp);
    					break;
    				}
    				case MotionEvent.ACTION_POINTER_DOWN:
    				case MotionEvent.ACTION_POINTER_UP:
    				case MotionEvent.ACTION_CANCEL:
    				case MotionEvent.ACTION_UP:
    				default: {
    					int pointerId = event.getPointerId(event.getActionIndex());
    					//如果是触发Action_Down的手指出现UP或Cancel事件。计算总位移并决定是不是需要关闭这个Activity
    					if(-1 != pointerId && mPointerId == pointerId) {
    						int currentPosY = (int)event.getY(event.findPointerIndex(mPointerId));
    						int distance = mDownPos - currentPosY;
    						int height = v.getHeight();
    						
    						if(distance <= -height/2) {
    							//滑动超过半屏,结束Activity。
    							v.scrollTo(0, -height);
    							v.invalidate();
    							SlideActivity.this.finish();
    						} else if (distance > -height/2 && distance < height/2) {
    							//滑动位置没超过半个屏幕,恢复初始位置
    							v.scrollTo(0, 0);
    							v.invalidate();
    						} else {
    							//滑动超过半屏,结束Activity。
    							v.scrollTo(0, height);
    							v.invalidate();
    							SlideActivity.this.finish();
    						}
    						//清除变量
    						mPointerId = -1;
    					}
    				}
    				}
    				return true;
    			}
    		});
    		Log.i(LOG_TAG, "onResume");
    	}
    
    	@Override
    	protected void onPause() {
    		super.onPause();
    		Log.i(LOG_TAG, "onPause");
    	}
    
    	@Override
    	protected void onStop() {
    		super.onStop();
    		Log.i(LOG_TAG, "onStop");
    	}
    
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		Log.i(LOG_TAG, "onDestroy");
    	}
    }
    
  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/leonli/p/3492090.html
Copyright © 2011-2022 走看看