package com.youplayer.player.fullplayer;
import android.content.Context;
import android.content.res.Resources.NotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.youplayer.player.R;
public class YouPlayerSlideView extends RelativeLayout {
private Context mContext;
private Bitmap mSlideBitmap;
private Paint mPaint = new Paint();
private Rect mSlideViewPos = new Rect();
private Rect src = new Rect();
private Rect dst = new Rect();
private boolean isSliding = false;
private int lastX = 0;
private int mSlideBitmapWidth = 59;
private int mSlideBitmapHeight = 59;
// private int mSlideBgWidth = 271;
private int mSlideBgHeight = 59;
private onSlideFinishedListener mOnSlideFinishedListener;
public YouPlayerSlideView(Context context) {
this(context, null);
}
public YouPlayerSlideView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initView();
}
public void initView(){
try {
setBackgroundResource(R.drawable.youplayer_fullscreen_icon_unlock_bg);
initBitmap();
} catch (NotFoundException e) {
e.printStackTrace();
}
}
public String getText(){
String str = mContext.getString(R.string.full_player_unlock_message);
return (str != null ? str : "");
}
public void initBitmap(){
try {
mSlideBitmap = ((BitmapDrawable)mContext.getResources().getDrawable(R.drawable.youplayer_fullscreen_icon_unlock_slide)).getBitmap();
if(mSlideBitmap != null){
mSlideBitmapWidth = mSlideBitmap.getWidth();
mSlideBitmapHeight = mSlideBitmap.getHeight();
}
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bgBitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.youplayer_fullscreen_icon_unlock_bg, options);
if(bgBitmap != null){
// mSlideBgWidth = bgBitmap.getWidth();
mSlideBgHeight = bgBitmap.getHeight();
}
if(bgBitmap != null && !bgBitmap.isRecycled()){
bgBitmap.recycle();
bgBitmap = null;
}
} catch (NotFoundException e) {
e.printStackTrace();
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
mSlideViewPos.set(l, t, r, b);
super.onLayout(changed, l, t, r, b);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
drawSlideBtn(canvas);
}
public void drawSlideBtn(Canvas canvas){
try {
src.left = 0;
src.top = 0;
src.right = mSlideBitmapWidth;
src.bottom = mSlideBitmapHeight;
dst.left = lastX;
dst.top = (mSlideBgHeight - mSlideBitmapHeight) / 2;
dst.right = lastX + mSlideBitmapWidth;
dst.bottom = ((mSlideBgHeight - mSlideBitmapHeight) / 2) + mSlideBitmapHeight;
canvas.drawBitmap(mSlideBitmap, src, dst, mPaint);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if(isSlideStart(event)){
isSliding = true;
isSlideStart();
}
break;
case MotionEvent.ACTION_MOVE:
if(isSliding){
int tmp = (int)event.getX();
if(tmp > mSlideViewPos.right - mSlideViewPos.left - mSlideBitmapWidth){
tmp = mSlideViewPos.right - mSlideViewPos.left - mSlideBitmapWidth + mSlideBitmapWidth / 5;
}
if(tmp < 0){
tmp = 0;
}
lastX = tmp;
invalidate();
}
break;
case MotionEvent.ACTION_UP:
if(isSlideFinished(event)){
isSlideEnd(true);
}else{
isSlideEnd(false);
}
isSliding = false;
lastX = 0;
invalidate();
break;
default:
break;
}
return true;
}
public void isSlideEnd(boolean isFinished){
if(mOnSlideFinishedListener != null){
mOnSlideFinishedListener.OnSlideEnd(isFinished);
}
}
public void isSlideStart(){
if(mOnSlideFinishedListener != null){
mOnSlideFinishedListener.OnSlideStart();
}
}
public boolean isSlideStart(MotionEvent event){
if((event.getRawX() >= mSlideViewPos.left) && (event.getRawX() <= (mSlideViewPos.left + mSlideBitmapWidth))){
return true;
}
return false;
}
public boolean isSlideFinished(MotionEvent event){
if((event.getRawX() >= (mSlideViewPos.left + (mSlideViewPos.right - mSlideViewPos.left) / 2))&& isSliding){
return true;
}
return false;
}
public void setOnSlideListener(onSlideFinishedListener l){
mOnSlideFinishedListener = l;
}
public interface onSlideFinishedListener{
public void OnSlideStart();
public void OnSlideEnd(boolean isFinished);
}
}