mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-20 21:18:07 +00:00
140 lines
3.8 KiB
Java
140 lines
3.8 KiB
Java
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();
|
|
}
|
|
}
|
|
|