您的位置:首页 > 移动开发 > Android开发

Android控件位置控制

2012-01-29 15:58 330 查看
OnTouchListener onSlider = new OnTouchListener(){
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			if(sdPos==null){
				sdPos = new int[2];
				slider.getLocationInWindow(sdPos);
				trackBottom = slider.getHeight() + sdPos[1];
				Display display = getWindowManager().getDefaultDisplay();
				sliderWidth = slider.getWidth();
				trackRight = display.getWidth() - sdPos[0];
				trackLeft = sdPos[0];
				lastX = sdPos[0];
				com.Logi("sdPos:"+sdPos[0]+","+sdPos[1]+","+trackBottom+","+trackLeft+","+trackRight);
			}
			return false;
		}
	};
	int touchCount = 0;
	int x,y;
	void touchMove(){
		touchCount++;
		while(true){
			if(touchCount>=2){
				touchCount = 0;
			}else{
				break;
			}
			if(sdPos==null) break;
			if(y<sdPos[1]) break;
			if(y>trackBottom) break;
			if(x<trackLeft) break;
			if(x>trackRight) break;
			com.Logi(""+x+","+y);
			x =  x - sdPos[0];
			if(x<24) x = 24;
			int x0 = trackRight-trackLeft-45;
			if(x>x0) x = x0;
			lastX = x + sdPos[0];
			slider.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,x,26));
			break;
		}
	}
	boolean startSlide = false;
	int		lastX = 0;
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch(event.getAction()){
		case MotionEvent.ACTION_DOWN:
			if(event.getX()<lastX+100)
				slideTask.Run(10,10);
			break;
		case MotionEvent.ACTION_MOVE:
			x = (int)event.getX();
			y = (int)event.getY();
			break;
		case MotionEvent.ACTION_UP:
			slideTask.Stop();
			break;
		}
		return super.onTouchEvent(event);
	}
	std.ScheduleTask slideTask = new std.ScheduleTask() {
		@Override
		void onRun() {
			touchMove();
		}
	};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: