package me.ccrama.redditslide.Views;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.widget.VideoView;
/**
* Code from https://github.com/father2sisters/scale_videoview
*/
public class PinchZoomVideoView extends VideoView {
ScaleGestureDetector mScaleGestureDetector;
GestureDetector mGestureDetector;
public PinchZoomVideoView(Context context) {
super(context);
mScaleGestureDetector = new ScaleGestureDetector(getContext(), new MyScaleGestureListener());
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mGestureDetector.onTouchEvent(event);
mScaleGestureDetector.onTouchEvent(event);
return true;
}
});
}
public PinchZoomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PinchZoomVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/**
* Resize video view by using SurfaceHolder.setFixedSize(...). See {@link android.view.SurfaceHolder#setFixedSize}
*
* @param width
* @param height
*/
public void setFixedVideoSize(int width, int height) {
getHolder().setFixedSize(width, height);
}
private class MyScaleGestureListener implements ScaleGestureDetector.OnScaleGestureListener {
private int mW, mH;
@Override
public boolean onScale(ScaleGestureDetector detector) {
// scale our video view
mW *= detector.getScaleFactor();
mH *= detector.getScaleFactor();
if (mW < 200) { // limits width
mW = getWidth();
mH = getHeight();
}
Log.d("onScale", "scale=" + detector.getScaleFactor() + ", w=" + mW + ", h=" + mH);
setFixedVideoSize(mW, mH); // important
getLayoutParams().width = mW;
getLayoutParams().height = mH;
return true;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
mW = getWidth();
mH = getHeight();
Log.d("onScaleBegin", "scale=" + detector.getScaleFactor() + ", w=" + mW + ", h=" + mH);
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
Log.d("onScaleEnd", "scale=" + detector.getScaleFactor() + ", w=" + mW + ", h=" + mH);
}
}
}