滑动图片验证:随着seekbar滑动,view随着动就是了,主要就是图片的比例跟滑块的图片比例
number就是相应的比例
public class SlideImageView extends View {
Bitmap bitmap;
Bitmap verifyBitmap;
Paint paint = new Paint();
// 拼图的位置
int y;
// 移动x坐标
int moveX;
// x坐标最大移动长度
int moveMax;
private float number;//扩大倍数
DecimalFormat df = new DecimalFormat("0.0000");
public SlideImageView(Context context) {
super(context);
}
public SlideImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SlideImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
setMeasuredDimension(width,width/2);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (bitmap == null)
return;
moveMax = getWidth();
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
//画背景图
int width = getWidth();
int height = getHeight();
number = Float.parseFloat(df.format((float)width/bitmapWidth));
Bitmap mBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
canvas.drawBitmap(mBitmap, 0, 0, paint);
//滑块
int verWidth = (int)(verifyBitmap.getWidth()*number);
int verHeight = (int)(verifyBitmap.getHeight()*number);
int verY = (int)(y*number);
Bitmap mverifyBitmap = Bitmap.createScaledBitmap(verifyBitmap, verWidth, verHeight, true);
canvas.drawBitmap(mverifyBitmap, moveX, verY, paint);//画验证图片
}
public void setImageBitmap(Bitmap bitmap, Bitmap verifyBitmap, int verifyY) {
this.bitmap = bitmap;
this.verifyBitmap = verifyBitmap;
this.y = verifyY;
invalidate();
}
public void setMove(double precent) {
if (precent < 0 || precent > 1)
return;
moveX = (int) (moveMax * precent);
invalidate();
}
public int getMoveX(){
int x = (int)((float)moveX/number);
return x;
}
public void setReDraw() {
moveX = 0;
invalidate();
}
}
//seekbar动态设置,左侧空白问题
seekBar.setMax(100); seekBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.seekbar,null)); seekBar.setThumb(context.getResources().getDrawable(R.drawable.circle_jiantou,null)); seekBar.setPadding(0,0,0,0); seekBar.setThumbOffset(0);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
slideImageView.setMove(progress*0.01);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
seekBar.setOnTouchListener(new View.OnTouchListener(){
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
reInit();
break;
case MotionEvent.ACTION_UP:
int moveX = slideImageView.getMoveX();
//moveX就是滑动的距离,这里已经对屏幕分辨率进行相应的处理
break;
}
return false;
}
});
滑块箭头资源
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="53dp"
android:height="53dp" />
<solid android:color="#fff" />
<stroke android:color="@color/common_gray" android:width="0.5dp"/>
</shape>
</item>
<item
android:width="18dp"
android:height="3dp"
android:gravity="center"
android:bottom="11dp"
>
<rotate android:fromDegrees="45">
<shape android:shape="rectangle">
<gradient
android:angle="-180"
android:endColor="@color/black_666"
android:startColor="@color/black_666" />
</shape>
</rotate>
</item>
<item
android:width="53dp"
android:height="53dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item
android:width="18dp"
android:height="3dp"
android:gravity="center"
android:top="11dp"
>
<rotate android:fromDegrees="-45">
<shape android:shape="rectangle">
<gradient
android:angle="-90"
android:endColor="@color/black_666"
android:startColor="@color/black_666" />
</shape>
</rotate>
</item>
</layer-list>
滑块对号资源
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="53dp"
android:height="53dp" />
<solid android:color="#fff" />
<stroke android:color="@color/common_gray" android:width="0.5dp"/>
</shape>
</item>
<item
android:width="18dp"
android:height="4dp"
android:gravity="center"
android:right="18dp"
android:top="15dp">
<rotate android:fromDegrees="40">
<shape android:shape="rectangle">
<gradient
android:angle="-180"
android:endColor="@color/green_stroke"
android:startColor="@color/green_stroke" />
</shape>
</rotate>
</item>
<item
android:width="53dp"
android:height="53dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item
android:width="32dp"
android:height="4dp"
android:gravity="center"
android:left="12dp"
android:top="4dp">
<rotate android:fromDegrees="-50">
<shape android:shape="rectangle">
<gradient
android:angle="-90"
android:endColor="@color/green_stroke"
android:startColor="@color/green_stroke" />
</shape>
</rotate>
</item>
</layer-list>
滑块叉号资源
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="53dp"
android:height="53dp" />
<solid android:color="#fff" />
<stroke android:color="@color/common_gray" android:width="0.5dp"/>
</shape>
</item>
<item
android:width="28dp"
android:height="4dp"
android:gravity="center"
>
<rotate android:fromDegrees="45"
android:toDegrees="45"
>
<shape android:shape="rectangle">
<gradient
android:angle="-180"
android:endColor="#E44242"
android:startColor="#E44242" />
</shape>
</rotate>
</item>
<item
android:width="53dp"
android:height="53dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item
android:width="28dp"
android:height="4dp"
android:gravity="center"
>
<rotate android:fromDegrees="-45"
android:toDegrees="-45"
>
<shape android:shape="rectangle">
<gradient
android:angle="-90"
android:endColor="@color/red_num"
android:startColor="@color/red_num" />
</shape>
</rotate>
</item>
</layer-list>
seekbar滑动进度条资源
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@android:id/background"
android:height="30dp"
>
<shape android:shape="rectangle">
<corners android:radius="15dp"/>
<!-- 描边颜色 -->
<stroke android:color="@color/gray_d6"
android:width="1dp"/>
<solid android:color="#EDEEF7"/>
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="15dp"/>
<!-- 进度条滑动时填充颜色 -->
<solid android:color="@color/green_move"/>
<stroke android:color="@color/green_stroke" android:width="1dp"/>
</shape>
</clip>
</item>
</layer-list>