来电滑动块控件

package org.linphone.ui;

import org.linphone.R;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;

/*
LinphoneSliders.java
Copyright (C) 2012  Belledonne Communications, Grenoble, France

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

/**
 * @author Sylvain Berfini
 */
public class LinphoneSliders extends View implements OnGestureListener {
	private Drawable leftSliderImg, rightSliderImg;
	private int leftSliderX, rightSliderX;
	private int slidersHeight, slidersWidth;
	private GestureDetector mGestures;
	private LinphoneSliderTriggered mTriggerListener;
	private boolean slidingLeftHandle, slidingRightHandle;
	private static final double mCoeff = 0.5;
	
	public LinphoneSliders(Context context, AttributeSet attrs) {
		super(context, attrs);
		mGestures = new GestureDetector(getContext(), this);
		leftSliderImg = getResources().getDrawable(R.drawable.slider_left);
		rightSliderImg = getResources().getDrawable(R.drawable.slider_right);
		
		slidersHeight = leftSliderImg.getIntrinsicHeight();
		slidersWidth = leftSliderImg.getIntrinsicWidth();
		
		leftSliderX = 0;
		rightSliderX = 0;
		slidingLeftHandle = slidingRightHandle = false;
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		rightSliderImg.setBounds(getWidth() - slidersWidth - rightSliderX, getHeight() - slidersHeight, getWidth(), getHeight());
		rightSliderImg.draw(canvas);
		
		leftSliderImg.setBounds(0, getHeight() - slidersHeight, slidersWidth + leftSliderX, getHeight());
		leftSliderImg.draw(canvas);
		
		if (slidingLeftHandle && Math.abs(leftSliderX) >= mCoeff * getWidth()) {
			mTriggerListener.onLeftHandleTriggered();
		} else if (slidingRightHandle && rightSliderX >= mCoeff * getWidth()) {
			mTriggerListener.onRightHandleTriggered();
		}
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_UP) {
			leftSliderX = 0;
			rightSliderX = 0;
			slidingLeftHandle = slidingRightHandle = false;
			invalidate();
		}
		
		return mGestures.onTouchEvent(event); 
	}

	@Override
	public boolean onDown(MotionEvent e) {
		return true;
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {
		
	}

	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		if (e1.getY() < getHeight() - slidersHeight) {
			return false;
		}
		
		if (e1.getX() < getWidth() / 2) {
			leftSliderX -= distanceX;
			slidingLeftHandle = true;
		} else {
			rightSliderX += distanceX;
			slidingRightHandle = true;
		}
		invalidate();
		
		return true;
	}

	@Override
	public void onShowPress(MotionEvent e) {
		
	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		return false;
	}
	
	public void setOnTriggerListener(LinphoneSliderTriggered listener) {
        mTriggerListener = listener;
    }

	public interface LinphoneSliderTriggered {
		public void onLeftHandleTriggered();
		public void onRightHandleTriggered();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值