package com.wistron.WiCamera.WiPanorama;
import com.wistron.swpc.wicamera3dii.R;
import Utilities.CSStaticData;
import android.R.integer;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;
public class PanoramaProgressIndicator extends ImageView {
Paint myPaint ;
String TAG="PanoramaProgressIndicator";
public static final int DIRECTION_NONE = 0;
public static final int DIRECTION_LEFT = 1;
public static final int DIRECTION_RIGHT = 2;
int viewwidth;
int viewheight;
int srcImageWidth;
int srcImageHeight;
private int mDirection=0;
Bitmap backgroundImage;
Bitmap progressImage;
Bitmap backgroundWrongImage;
int mType=0;
Rect src;
Rect des;
int progress;
float linestart;
private final Paint mLinePaint = new Paint();
private final Paint mLinePaint_ = new Paint();
private boolean isToFast=false;
private boolean isWrongPose=false;
public PanoramaProgressIndicator(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);
myPaint.setAntiAlias(true);
myPaint.setFilterBitmap(true);
mLinePaint.setStyle(Paint.Style.STROKE);
mLinePaint.setColor(Color.WHITE);
mLinePaint.setAntiAlias(true);
mLinePaint_.setStyle(Paint.Style.FILL);
mLinePaint_.setColor(Color.WHITE);
mLinePaint_.setAntiAlias(true);
viewwidth=350;
viewheight=50;
linestart=viewheight/2;
backgroundWrongImage=BitmapFactory.decodeResource(context.getResources(), R.drawable.progress_panoramatest_error);
backgroundImage=BitmapFactory.decodeResource(context.getResources(),R.drawable.background_panoramatest );
progressImage=BitmapFactory.decodeResource(context.getResources(),R.drawable.progress_panoramatest );
srcImageWidth=backgroundImage.getWidth();
srcImageHeight=backgroundImage.getHeight();
if(CSStaticData.DEBUG)
Log.e(TAG, "控件长宽为"+srcImageWidth+"*"+srcImageHeight);
src=new Rect(0, 0, srcImageWidth, srcImageHeight);
des=new Rect(0, 0, viewwidth, viewheight);
}
public void setIsTofast(boolean bool )
{
isToFast=bool;
invalidate();
}
public void reset()
{
isToFast=false;
isWrongPose=false;
mType=0;
linestart=viewheight/2;
mDirection=0;
progress=0;
src=new Rect(0, 0, srcImageWidth, srcImageHeight);
des=new Rect(0, 0, viewwidth, viewheight);
}
public void setType(int type)
{
mType=type;
}
/**
* 更新保存进度
* @param progress
*/
public void setProgress(int progress)
{
if (progress > 100)
{
progress = 100;
}
if (progress < 0)
{
progress = 0;
}
this.progress = progress;
mDirection = DIRECTION_NONE;
invalidate();
}
/**
* 更新拍摄进度
* @param progress
* @param derectionprogress
* @return
*/
public int setProgress(int progress, int derectionprogress)
{
if (mDirection == DIRECTION_NONE)
{
if (derectionprogress > 10)
{
mDirection = DIRECTION_RIGHT;
return DIRECTION_RIGHT;
} else if (derectionprogress < -10)
{
mDirection = DIRECTION_LEFT;
return DIRECTION_LEFT;
}
} else
{
if (progress > 100)
{
progress = 100;
}
if (progress < 0)
{
progress = 0;
}
this.progress = progress;
invalidate();
}
return DIRECTION_NONE;
}
public float getRate()
{
return ((float)progress)/100f;
}
public void convertSensor(double d )
{
double res=-d/10f*90;
setlinerate(res);
}
public void setlinerate(double d )
{
float tan= (float) Math.tan(d);
linestart=viewheight/2-tan*viewwidth/2;
if(linestart<0)
{
linestart=0;
isWrongPose=true;
}
else if(linestart>viewheight)
{
linestart=viewheight;
isWrongPose=true;
}
else {
isWrongPose=false;
}
invalidate();
}
public Rect getSrcRect(Rect src,float rate )
{
if(mDirection==DIRECTION_LEFT)
{
return new Rect((int)(src.right*(1-rate)), 0,src.right , src.bottom);
}
else
{
return new Rect(0, 0,(int) (src.right*rate) , src.bottom);
}
}
public Rect getDesRect(Rect des,float rate )
{
if(mDirection==DIRECTION_LEFT)
{
return new Rect((int)(des.right*(1-rate)), 0,des.right , des.bottom);
}
else
{
return new Rect(0, 0,(int) (des.right*rate) , des.bottom);
}
}
@Override
protected void onDraw(Canvas canvas) {
//画背景图片
if(mType==0)
{
if(isToFast||isWrongPose)
{
canvas.drawBitmap(backgroundWrongImage, src, des, null);
}
else
{
canvas.drawBitmap(backgroundImage, src, des, null);
}
}
else
{
canvas.drawBitmap(backgroundImage, src, des, null);
}
float rate_src= getRate();
//画进度条
canvas.drawBitmap(progressImage, getSrcRect(src,rate_src), getDesRect(des,rate_src), null);
if(mType==0)
{
canvas.drawLine(0, 0.5f*viewheight, viewwidth, 0.5f*viewheight, mLinePaint_);
Path path = new Path();
path.moveTo(0, linestart);
path.lineTo(viewwidth,viewheight-linestart);
PathEffect effects = new DashPathEffect(new float[]{6,6,6,6},1);
mLinePaint.setPathEffect(effects);
canvas.drawPath(path, mLinePaint);
// canvas.drawLine(0, linestart, viewwidth, viewheight-linestart, mLinePaint);
}
}
}