@@ -0,0 +1,234 @@ | |||||
package com.bonait.bnframework.common.myprogress; | |||||
import android.animation.ObjectAnimator; | |||||
import android.content.Context; | |||||
import android.graphics.Canvas; | |||||
import android.graphics.Color; | |||||
import android.graphics.Paint; | |||||
import android.graphics.RectF; | |||||
import android.util.AttributeSet; | |||||
import android.view.View; | |||||
import android.view.animation.DecelerateInterpolator; | |||||
import com.bonait.bnframework.R; | |||||
/** | |||||
* Description 圆形装逼进度条 | |||||
* Author: tu | |||||
* Date: 2016-08-19 | |||||
* Time: 14:33 | |||||
*/ | |||||
public class CircleProgress extends View{ | |||||
private float textSize = getResources().getDimension(R.dimen.text_size_14); | |||||
private float dotX, dotY;//圆点xy | |||||
private int viewWidth;//view的宽度 | |||||
private int viewHigth;//view的高度 | |||||
private Paint mPaint,mPaintArc;//画笔 212 62 96 | |||||
private int colorBg = Color.argb(255,54,68,76);//背景圆颜色 | |||||
private int colorWhite = Color.argb(255,255,255,255);//文字颜色 | |||||
private int colorBlack = Color.argb(255,34,49,59);//第二刻度颜色 | |||||
private int colorBlue = Color.argb(255,94,248,249);//刻度颜色 | |||||
private int pandding = 10; | |||||
private RectF rectF; | |||||
private float radius = 10;//半径 | |||||
private float scaleLineLenth = 3;//刻度线长 | |||||
private int scaleAngle = 10;//刻度间隔 | |||||
private int scaleWidth = 5;//刻度宽度 | |||||
private int curProgress = 0;//0 ~ 100进度 当前进度 | |||||
private int oldProgress = 0; | |||||
public void setColorBlue(int colorBlue) { | |||||
this.colorBlue = colorBlue; | |||||
} | |||||
public void setTextSize(float textSize) { | |||||
this.textSize = textSize; | |||||
} | |||||
public int getCurProgress() { | |||||
return curProgress; | |||||
} | |||||
public void setCurProgress(int curProgress) { | |||||
this.curProgress = curProgress; | |||||
invalidate(); | |||||
} | |||||
public CircleProgress(Context context) { | |||||
this(context,null); | |||||
} | |||||
public CircleProgress(Context context, AttributeSet attrs) { | |||||
this(context, attrs,0); | |||||
} | |||||
public CircleProgress(Context context, AttributeSet attrs, int defStyleAttr) { | |||||
super(context, attrs, defStyleAttr); | |||||
init(context); | |||||
} | |||||
/** | |||||
* 初始化画笔 | |||||
*/ | |||||
private void init(Context context) { | |||||
//初始化坐标画笔 | |||||
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// | |||||
mPaintArc = new Paint(Paint.ANTI_ALIAS_FLAG);// | |||||
mPaint.setColor(colorWhite); | |||||
mPaintArc.setColor(colorBg); | |||||
mPaint.setAntiAlias(true); | |||||
mPaintArc.setAntiAlias(true); | |||||
mPaint.setTextSize(15); | |||||
mPaint.setStyle(Paint.Style.STROKE);//空心 | |||||
//当前进度 | |||||
} | |||||
@Override | |||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | |||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec); | |||||
int widthMode = MeasureSpec.getMode(widthMeasureSpec); | |||||
int heightMode = MeasureSpec.getMode(heightMeasureSpec); | |||||
int heightSize = MeasureSpec.getSize(heightMeasureSpec); | |||||
int height; | |||||
int width; | |||||
//宽度测量 | |||||
if (widthMode == MeasureSpec.EXACTLY) { | |||||
width = widthSize; | |||||
} else { | |||||
width = getMeasuredWidth(); | |||||
} | |||||
dotX = width / 2; | |||||
viewWidth = width; | |||||
//高度测量 | |||||
if (heightMode == MeasureSpec.EXACTLY) { | |||||
height = heightSize; | |||||
} else { | |||||
height = getMeasuredHeight(); | |||||
} | |||||
viewHigth = height; | |||||
dotY = height / 2; | |||||
radius = dotX-(getPaddingLeft() + getPaddingRight())/2; | |||||
scaleLineLenth = (int)(radius/2.5); | |||||
// | |||||
rectF = new RectF(dotX - radius, dotY - radius, dotX + radius, dotY + radius); | |||||
setMeasuredDimension(width, height); | |||||
} | |||||
private void drawProgress(Canvas canvas){ | |||||
if(mPaintArc == null){ | |||||
return; | |||||
} | |||||
//圆 | |||||
mPaintArc.setStyle(Paint.Style.FILL); | |||||
canvas.drawCircle(dotX, dotY, radius, mPaintArc); | |||||
//中心进度值 | |||||
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);//实心 | |||||
mPaint.setTextAlign(Paint.Align.CENTER); | |||||
mPaint.setStrokeWidth(1); | |||||
mPaint.setTextSize(textSize); | |||||
mPaint.setColor(colorWhite); | |||||
canvas.drawText(curProgress + "%",dotX, | |||||
dotY+getResources().getDimension(R.dimen.text_size_14)/2 | |||||
,mPaint); | |||||
//黑色刻度 12点钟方向为起始点(-90°),正时针方法绘制 | |||||
for (int angle = -90; angle <= 270; angle += scaleAngle){ | |||||
float xY[] = caculCoordinate(angle); | |||||
if(xY != null) { | |||||
mPaint.setStrokeWidth(scaleWidth); | |||||
mPaint.setColor(colorBlack); | |||||
canvas.drawLine(xY[0], xY[1],xY[2],xY[3], mPaint); | |||||
} | |||||
} | |||||
//进度算法 | |||||
//360 除与 scaleAngle(进度间隔10) = 36; 再拿进度总数100换算当前进度 | |||||
//算出当前进度占几个刻度 | |||||
int curProgressCount = curProgress * (360/scaleAngle) /100; | |||||
int angleStart = -90; | |||||
for (int count = 0; count < curProgressCount;count ++){ | |||||
float xY[] = caculCoordinate(angleStart); | |||||
if(xY != null) { | |||||
mPaint.setStrokeWidth(scaleWidth); | |||||
mPaint.setColor(colorBlue); | |||||
canvas.drawLine(xY[0], xY[1],xY[2],xY[3], mPaint); | |||||
} | |||||
angleStart += scaleAngle; | |||||
} | |||||
} | |||||
/** | |||||
* 根据圆心角 计算圆周上的坐标 | |||||
* @param angle | |||||
* @return xY[0] startX; xY[1] startY; xY[2] endX; xY[3] endY; | |||||
*/ | |||||
private float[] caculCoordinate(int angle){ | |||||
//angle >180 angle = angle -180 | |||||
float xY[] = new float[4]; | |||||
//角度处理 | |||||
int tempAngle = Math.abs(angle); | |||||
float tempScaleLineLenth = scaleLineLenth; | |||||
if(270 > tempAngle && tempAngle >= 180) { | |||||
tempAngle = tempAngle - 180; | |||||
xY[0] = dotX - getCoordinateX(tempAngle,radius); | |||||
xY[1] = dotY - getCoordinateY(tempAngle,radius); | |||||
xY[2] = xY[0] + getCoordinateX(tempAngle,tempScaleLineLenth); | |||||
xY[3] = xY[1] + getCoordinateY(tempAngle,tempScaleLineLenth); | |||||
}else if(180 > tempAngle && tempAngle > 90){ | |||||
tempAngle = 180 - tempAngle; | |||||
xY[0] = dotX - getCoordinateX(tempAngle,radius); | |||||
xY[1] = dotY + getCoordinateY(tempAngle,radius); | |||||
xY[2] = xY[0] + getCoordinateX(tempAngle,tempScaleLineLenth); | |||||
xY[3] = xY[1] - getCoordinateY(tempAngle,tempScaleLineLenth); | |||||
}else if(90 >= tempAngle && tempAngle >= 0){ | |||||
xY[0] = dotX + getCoordinateX(tempAngle,radius); | |||||
xY[1] = angle < 0 ? dotY - getCoordinateY(tempAngle,radius) : dotY + getCoordinateY(tempAngle,radius); | |||||
xY[2] = xY[0] - getCoordinateX(tempAngle,tempScaleLineLenth); | |||||
xY[3] = angle < 0 ? xY[1] + getCoordinateY(tempAngle,tempScaleLineLenth) : xY[1] - getCoordinateY(tempAngle,tempScaleLineLenth); | |||||
} | |||||
return xY; | |||||
} | |||||
/** | |||||
* 获取圆周上y值相对值 | |||||
* @param tempAngle | |||||
* @param radius 算开始坐标是传半径,算结束坐标时传刻度线的长度 | |||||
* @return | |||||
*/ | |||||
private float getCoordinateY(int tempAngle,float radius){ | |||||
//利用正弦函数算出y坐标 | |||||
return (float) (Math.sin(tempAngle*Math.PI/180)*(radius - 15)); //10 是离圆弧的距离 | |||||
} | |||||
/** | |||||
* 获取圆周上X值相对值 | |||||
* @param tempAngle | |||||
* @return | |||||
*/ | |||||
private float getCoordinateX(int tempAngle,float radius){ | |||||
//利用余弦函数算出y坐标 | |||||
return (float) (Math.cos(tempAngle*Math.PI/180)*(radius - 15)); | |||||
} | |||||
@Override | |||||
protected void onDraw(Canvas canvas) { | |||||
super.onDraw(canvas); | |||||
drawProgress(canvas); | |||||
} | |||||
public void setProgress(int progress){ | |||||
if (progress < 0 || progress > 100) | |||||
return; | |||||
ObjectAnimator o = ObjectAnimator.ofInt(this, "curProgress", oldProgress, progress); | |||||
o.setDuration(1000); | |||||
o.setInterpolator(new DecelerateInterpolator()); | |||||
o.start(); | |||||
oldProgress = progress; | |||||
} | |||||
} |
@@ -0,0 +1,222 @@ | |||||
package com.bonait.bnframework.common.myprogress; | |||||
import android.content.Context; | |||||
import android.graphics.Bitmap; | |||||
import android.graphics.BitmapFactory; | |||||
import android.graphics.Canvas; | |||||
import android.graphics.Color; | |||||
import android.graphics.Paint; | |||||
import android.util.AttributeSet; | |||||
import android.util.TypedValue; | |||||
import android.view.MotionEvent; | |||||
import android.view.View; | |||||
import com.bonait.bnframework.R; | |||||
import java.util.ArrayList; | |||||
//ArrayList<String> volume_sections = new ArrayList<String>(); | |||||
// volume_sections.add("小"); | |||||
// volume_sections.add("标准"); | |||||
// volume_sections.add("大"); | |||||
// volume_sections.add("特大"); | |||||
// progressBar.initData(volume_sections); | |||||
// progressBar.setProgress(0); //设置默认级别 | |||||
// progressBar.setResponseOnTouch(this);//activity实现了下面的接口ResponseOnTouch,每次touch会回调onTouchResponse | |||||
//@Override | |||||
//public void onTouchResponse(int volume) { | |||||
// } | |||||
public class CustomSeekbar extends View { | |||||
private final String TAG = "CustomSeekbar"; | |||||
private int width; | |||||
private int height; | |||||
private int downX = 0; | |||||
private int downY = 0; | |||||
private int upX = 0; | |||||
private int upY = 0; | |||||
private int moveX = 0; | |||||
private int moveY = 0; | |||||
private float scale = 0; | |||||
private int perWidth = 0; | |||||
private Paint mPaint; | |||||
private Paint mTextPaint; | |||||
private Paint buttonPaint; | |||||
private Canvas canvas; | |||||
private Bitmap bitmap; | |||||
private Bitmap thumb; | |||||
private Bitmap spot; | |||||
private Bitmap spot_on; | |||||
private int hotarea = 150;//点击的热区 | |||||
private int cur_sections = 2; | |||||
private ResponseOnTouch responseOnTouch; | |||||
private int bitMapHeight = 30;//第一个点的起始位置起始,图片的长宽是76,所以取一半的距离 | |||||
private int textMove = 60;//字与下方点的距离,因为字体字体是40px,再加上10的间隔 | |||||
private int[] colors = new int[]{0xffdf5600, 0x33000000};//进度条的橙色,进度条的灰色,字体的灰色 | |||||
private int textSize; | |||||
private int circleRadius; | |||||
private ArrayList<String> section_title; | |||||
public CustomSeekbar(Context context) { | |||||
super(context); | |||||
} | |||||
public CustomSeekbar(Context context, AttributeSet attrs) { | |||||
this(context, attrs, 0); | |||||
} | |||||
public CustomSeekbar(Context context, AttributeSet attrs, int defStyleAttr) { | |||||
super(context, attrs, defStyleAttr); | |||||
cur_sections = 0; | |||||
bitmap = Bitmap.createBitmap(900, 1100, Bitmap.Config.ARGB_8888); | |||||
canvas = new Canvas(); | |||||
canvas.setBitmap(bitmap); | |||||
thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe_large); //这个是滑动图标 | |||||
spot = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe); //这个是未滑动到的界点的图标 | |||||
spot_on = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe); //这个是已经滑动过的界点的图标 | |||||
bitMapHeight = thumb.getHeight() / 2; //这里影响点中的图标的位置 这个正好 不用改 | |||||
textMove = bitMapHeight + 50; //xqx 这里参数大小要改,不是固定的,具体看项目效果 | |||||
textSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics()); //文字大小,第二个参数个人设置 | |||||
circleRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, getResources().getDisplayMetrics()); | |||||
mPaint = new Paint(Paint.DITHER_FLAG); | |||||
mPaint.setAntiAlias(true);//锯齿不显示 | |||||
mPaint.setStrokeWidth(5); | |||||
mTextPaint = new Paint(Paint.DITHER_FLAG); | |||||
mTextPaint.setAntiAlias(true); | |||||
mTextPaint.setTextSize(textSize); | |||||
mTextPaint.setColor(0xffb5b5b4); | |||||
buttonPaint = new Paint(Paint.DITHER_FLAG); | |||||
buttonPaint.setAntiAlias(true); | |||||
} | |||||
/** | |||||
* 实例化后调用,设置bar的段数和文字 | |||||
*/ | |||||
public void initData(ArrayList<String> section) { | |||||
if (section != null) { | |||||
section_title = section; | |||||
} else { | |||||
//如果没有传入正确的分类级别数据,则默认使用“低”“中”“高” | |||||
String[] str = new String[]{"低", "中", "高"}; | |||||
section_title = new ArrayList<String>(); | |||||
for (int i = 0; i < str.length; i++) { | |||||
section_title.add(str[i]); | |||||
} | |||||
} | |||||
} | |||||
@Override | |||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | |||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec); | |||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec); | |||||
int heightSize = MeasureSpec.getSize(heightMeasureSpec); | |||||
width = widthSize; | |||||
float scaleX = widthSize / 1080; | |||||
float scaleY = heightSize / 1920; | |||||
scale = Math.max(scaleX, scaleY); | |||||
//控件的高度 | |||||
height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()); | |||||
setMeasuredDimension(width, height); | |||||
width = width - bitMapHeight / 2; | |||||
perWidth = (width - section_title.size() * spot.getWidth() - thumb.getWidth() / 2) / (section_title.size() - 1); | |||||
hotarea = perWidth / 2; | |||||
} | |||||
@Override | |||||
protected void onDraw(Canvas canvas) { | |||||
super.onDraw(canvas); | |||||
mPaint.setColor(Color.WHITE); | |||||
mPaint.setStyle(Paint.Style.FILL); | |||||
mPaint.setAlpha(0); | |||||
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint); | |||||
canvas.drawBitmap(bitmap, 0, 0, null); | |||||
mPaint.setAlpha(255); | |||||
mPaint.setColor(colors[1]); | |||||
canvas.drawLine(bitMapHeight, height * 2 / 3, width - bitMapHeight - spot_on.getWidth() / 2 + 10, height * 2 / 3, mPaint); | |||||
int section = 0; | |||||
while (section < section_title.size()) { | |||||
if (section < cur_sections) { | |||||
mPaint.setColor(colors[0]); | |||||
canvas.drawLine(thumb.getWidth() / 2 + section * perWidth + (section + 1) * spot_on.getWidth(), height * 2 / 3, | |||||
thumb.getWidth() / 2 + section * perWidth + (section + 1) * spot_on.getWidth() + perWidth, height * 2 / 3, mPaint); | |||||
canvas.drawBitmap(spot_on, thumb.getWidth() / 2 + section * perWidth + section * spot_on.getWidth(), height * 2 / 3 - spot_on.getHeight() / 2, mPaint); | |||||
} else { | |||||
mPaint.setAlpha(255); | |||||
if (section == section_title.size() - 1) { | |||||
canvas.drawBitmap(spot, width - spot_on.getWidth() - bitMapHeight / 2, height * 2 / 3 - spot.getHeight() / 2, mPaint); | |||||
} else { | |||||
canvas.drawBitmap(spot, thumb.getWidth() / 2 + section * perWidth + section * spot_on.getWidth(), height * 2 / 3 - spot.getHeight() / 2, mPaint); | |||||
} | |||||
} | |||||
if (section == section_title.size() - 1) { | |||||
canvas.drawText(section_title.get(section), width - spot_on.getWidth() - bitMapHeight / 4 - textSize / 2 - 38, height * 2 / 3 - textMove, mTextPaint); | |||||
} else { | |||||
if (section_title.get(section).length() == 2) | |||||
canvas.drawText(section_title.get(section), thumb.getWidth() / 2 + section * perWidth + section * spot_on.getWidth() - 40, height * 2 / 3 - textMove, mTextPaint); | |||||
else | |||||
canvas.drawText(section_title.get(section), thumb.getWidth() / 2 + section * perWidth + section * spot_on.getWidth() - 20, height * 2 / 3 - textMove, mTextPaint); | |||||
} | |||||
section++; | |||||
} | |||||
if (cur_sections == section_title.size() - 1) { | |||||
canvas.drawBitmap(thumb, width - spot_on.getWidth() - bitMapHeight / 2 - thumb.getWidth() / 2, | |||||
height * 2 / 3 - bitMapHeight, buttonPaint); | |||||
} else { | |||||
canvas.drawBitmap(thumb, thumb.getWidth() / 2 + cur_sections * perWidth + cur_sections * spot_on.getWidth() - thumb.getWidth() / 4, | |||||
height * 2 / 3 - bitMapHeight, buttonPaint); | |||||
} | |||||
} | |||||
@Override | |||||
public boolean onTouchEvent(MotionEvent event) { | |||||
super.onTouchEvent(event); | |||||
switch (event.getAction()) { | |||||
case MotionEvent.ACTION_DOWN: | |||||
thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe_large); | |||||
downX = (int) event.getX(); | |||||
downY = (int) event.getY(); | |||||
responseTouch(downX, downY); | |||||
break; | |||||
case MotionEvent.ACTION_MOVE: | |||||
thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe_large); | |||||
moveX = (int) event.getX(); | |||||
moveY = (int) event.getY(); | |||||
responseTouch(moveX, moveY); | |||||
break; | |||||
case MotionEvent.ACTION_UP: | |||||
thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe_large); | |||||
upX = (int) event.getX(); | |||||
upY = (int) event.getY(); | |||||
responseTouch(upX, upY); | |||||
responseOnTouch.onTouchResponse(cur_sections); | |||||
break; | |||||
} | |||||
return true; | |||||
} | |||||
private void responseTouch(int x, int y) { | |||||
if (x <= width - bitMapHeight / 2) { | |||||
cur_sections = (x + perWidth / 3) / perWidth; | |||||
} else { | |||||
cur_sections = section_title.size() - 1; | |||||
} | |||||
invalidate(); | |||||
} | |||||
//设置监听 | |||||
public void setResponseOnTouch(ResponseOnTouch response) { | |||||
//注意 ,这里是接口,实现你到达界点的监听事件,因为这个自定义控件继承的View而不是SeekBar,所以只能使用接口实现监听 | |||||
responseOnTouch = response; | |||||
} | |||||
//设置进度 | |||||
public void setProgress(int progress) { | |||||
cur_sections = progress; | |||||
invalidate(); | |||||
} | |||||
} |
@@ -0,0 +1,125 @@ | |||||
package com.bonait.bnframework.common.myprogress; | |||||
import android.animation.ObjectAnimator; | |||||
import android.content.Context; | |||||
import android.graphics.Canvas; | |||||
import android.graphics.Color; | |||||
import android.graphics.Paint; | |||||
import android.graphics.RectF; | |||||
import android.util.AttributeSet; | |||||
import android.view.View; | |||||
import android.view.animation.DecelerateInterpolator; | |||||
/** | |||||
* Description 酷炫水平进度条 | |||||
* Author: tu | |||||
* Date: 2016-08-22 | |||||
* Time: 14:59 | |||||
*/ | |||||
public class HorizonalProgress extends View { | |||||
private int viewWidth;//view的宽度 | |||||
private int viewHigth;//view的高度 | |||||
private Paint mPaint;//画笔 212 62 96 | |||||
private int colorSecondProgress = Color.argb(255,229,237,245);//背景圆颜色,进度条背景色 | |||||
private int colorProgress = Color.argb(255,19,146,255);//背景圆颜色,一级进度条颜色 | |||||
private int progressHeight = 30;//进度条的高度 | |||||
private RectF rectF = new RectF(); | |||||
private int curProgress = 0; //必须小于等于100 大于0 | |||||
private int oldProgress = 0; | |||||
public void setColorSecondProgress(int colorSecondProgress) { | |||||
this.colorSecondProgress = colorSecondProgress; | |||||
} | |||||
public void setColorProgress(int colorProgress) { | |||||
this.colorProgress = colorProgress; | |||||
} | |||||
public void setProgressHeight(int progressHeight) { | |||||
this.progressHeight = progressHeight; | |||||
} | |||||
public void setCurProgress(int curProgress) { | |||||
this.curProgress = curProgress; | |||||
invalidate(); | |||||
} | |||||
public HorizonalProgress(Context context) { | |||||
this(context,null); | |||||
} | |||||
public HorizonalProgress(Context context, AttributeSet attrs) { | |||||
this(context, attrs,0); | |||||
} | |||||
public HorizonalProgress(Context context, AttributeSet attrs, int defStyleAttr) { | |||||
super(context, attrs, defStyleAttr); | |||||
init(); | |||||
} | |||||
private void init(){ | |||||
//初始化坐标画笔 | |||||
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// | |||||
mPaint.setColor(colorSecondProgress); | |||||
mPaint.setAntiAlias(true); | |||||
mPaint.setStyle(Paint.Style.STROKE);//空心 | |||||
curProgress = 0; | |||||
} | |||||
@Override | |||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | |||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec); | |||||
int widthMode = MeasureSpec.getMode(widthMeasureSpec); | |||||
int heightMode = MeasureSpec.getMode(heightMeasureSpec); | |||||
int heightSize = MeasureSpec.getSize(heightMeasureSpec); | |||||
int height; | |||||
int width; | |||||
//宽度测量 | |||||
if (widthMode == MeasureSpec.EXACTLY) { | |||||
width = widthSize; | |||||
} else { | |||||
width = getMeasuredWidth(); | |||||
} | |||||
viewWidth = width; | |||||
//高度测量 | |||||
if (heightMode == MeasureSpec.EXACTLY) { | |||||
height = heightSize; | |||||
} else { | |||||
height = getMeasuredHeight(); | |||||
} | |||||
//进度条的高度根据 | |||||
viewHigth = progressHeight; | |||||
setMeasuredDimension(width, viewHigth); | |||||
} | |||||
/** | |||||
* 绘制进度 | |||||
* @param canvas | |||||
*/ | |||||
private void drawProgress(Canvas canvas){ | |||||
rectF.left = 0; | |||||
rectF.right = viewWidth; | |||||
rectF.top = 0; | |||||
rectF.bottom = viewHigth; | |||||
mPaint.setStyle(Paint.Style.FILL); | |||||
mPaint.setColor(colorSecondProgress); | |||||
//灰色背景 | |||||
canvas.drawRoundRect(rectF,viewHigth/2,viewHigth/2,mPaint); | |||||
//进度 | |||||
mPaint.setColor(colorProgress); | |||||
rectF.right = curProgress * viewWidth / 100; | |||||
canvas.drawRoundRect(rectF,viewHigth/2,viewHigth/2,mPaint); | |||||
} | |||||
@Override | |||||
protected void onDraw(Canvas canvas) { | |||||
super.onDraw(canvas); | |||||
drawProgress(canvas); | |||||
} | |||||
public void setProgress(int progress){ | |||||
if (progress < 0 || progress > 100) | |||||
return; | |||||
ObjectAnimator o = ObjectAnimator.ofInt(this, "curProgress", oldProgress, progress); | |||||
o.setDuration(1000); | |||||
o.setInterpolator(new DecelerateInterpolator()); | |||||
o.start(); | |||||
oldProgress = progress; | |||||
} | |||||
} |
@@ -0,0 +1,190 @@ | |||||
package com.bonait.bnframework.common.myprogress; | |||||
import android.R.dimen; | |||||
import android.content.Context; | |||||
import android.content.res.TypedArray; | |||||
import android.graphics.Color; | |||||
import android.util.AttributeSet; | |||||
import android.util.Log; | |||||
import android.view.MotionEvent; | |||||
import android.view.View; | |||||
import android.view.ViewConfiguration; | |||||
import android.view.ViewGroup; | |||||
import android.view.ViewTreeObserver; | |||||
import android.view.ViewTreeObserver.OnGlobalLayoutListener; | |||||
import android.widget.FrameLayout; | |||||
import android.widget.RelativeLayout; | |||||
import com.bonait.bnframework.R; | |||||
/** | |||||
* Description 组合装逼进度 | |||||
* Author: tu | |||||
* Date: 2016-08-22 | |||||
* Time: 15:36 | |||||
*/ | |||||
public class MyProgress extends RelativeLayout { | |||||
private Context context; | |||||
private float textProgressSize;//圆形进度条中间文字 | |||||
private float horizonalProgressHeight;//横条高度 | |||||
private float circleProgressRadus;//圆形半径 | |||||
private int colorProgress;//进度条颜色,圆盘刻度颜色 | |||||
private int colorSecondProgress;//进度条背景颜色 | |||||
private boolean flagPaint = true;//绘图标志 | |||||
int newProgress; | |||||
private CircleProgress mCircleProgress; | |||||
private HorizonalProgress mHorizonalProgress; | |||||
//private int touchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();//最小滑动阀值 | |||||
public MyProgress(Context context) { | |||||
this(context,null); | |||||
} | |||||
public MyProgress(Context context, AttributeSet attrs) { | |||||
this(context, attrs,0); | |||||
} | |||||
public MyProgress(Context context, AttributeSet attrs, int defStyleAttr) { | |||||
super(context, attrs, defStyleAttr); | |||||
this.context = context; | |||||
init(attrs); | |||||
ViewTreeObserver vto = getViewTreeObserver(); | |||||
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { | |||||
@Override | |||||
public void onGlobalLayout() { | |||||
if(flagPaint){ | |||||
flagPaint = false; | |||||
initHorizonalProgress(); | |||||
}else{ | |||||
} | |||||
} | |||||
}); | |||||
} | |||||
private void init(AttributeSet attrs){ | |||||
flagPaint = true; | |||||
//获取自定义xml属性 | |||||
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.myMagicProgress); | |||||
int n = typedArray.getIndexCount(); | |||||
for (int i = 0; i < n; i++) { | |||||
int attr = typedArray.getIndex(i); | |||||
switch (attr) { | |||||
case R.styleable.myMagicProgress_circleProgressRadus: | |||||
// Log.e("tag", "typedArray.getDimension(attr, 0)="+typedArray.getDimension(attr, 0)+",typedArray.getDimension(i, 0)="+typedArray.getDimension(i, 0)); | |||||
circleProgressRadus = typedArray.getDimension(attr, 0); | |||||
break; | |||||
case R.styleable.myMagicProgress_horizonalProgressHeight: | |||||
horizonalProgressHeight = typedArray.getDimension(attr, 0); | |||||
break; | |||||
case R.styleable.myMagicProgress_textProgressSize: | |||||
textProgressSize = typedArray.getDimension(attr, 0); | |||||
break; | |||||
case R.styleable.myMagicProgress_colorProgress: | |||||
colorProgress = typedArray.getColor(attr, Color.GRAY); | |||||
break; | |||||
case R.styleable.myMagicProgress_colorSecondProgress: | |||||
colorSecondProgress = typedArray.getColor(attr, Color.GRAY); | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
//横向进度条稍后设置参数,需要圆形进度条绘图完成,根据宽度绘制左右边距 | |||||
mHorizonalProgress = new HorizonalProgress(getContext()); | |||||
mHorizonalProgress.setProgressHeight((int) horizonalProgressHeight); | |||||
mHorizonalProgress.setColorSecondProgress(colorSecondProgress); | |||||
mHorizonalProgress.setColorProgress(colorProgress); | |||||
int radus = (int) circleProgressRadus; | |||||
mCircleProgress = new CircleProgress(getContext()); | |||||
mCircleProgress.setTextSize(textProgressSize); | |||||
mCircleProgress.setColorBlue(colorProgress); | |||||
LayoutParams cp_lp = new LayoutParams(radus,radus); | |||||
cp_lp.addRule(RelativeLayout.CENTER_VERTICAL); | |||||
mCircleProgress.setLayoutParams(cp_lp); | |||||
addView(mHorizonalProgress); | |||||
addView(mCircleProgress); | |||||
initView(); | |||||
} | |||||
private float mDownX; | |||||
private void initView(){ | |||||
mCircleProgress.setOnTouchListener(new OnTouchListener() { | |||||
@Override | |||||
public boolean onTouch(View view, MotionEvent event) { | |||||
switch (event.getAction()) { | |||||
case MotionEvent.ACTION_DOWN: | |||||
mDownX = event.getX(); | |||||
// Log.d("Tag",event.getX() + ":" + event.getRawX()); | |||||
break; | |||||
case MotionEvent.ACTION_MOVE: | |||||
// Log.d("Tag",event.getX() + ":" + event.getRawX()); | |||||
float disX = event.getX() - mDownX; | |||||
float llX = mCircleProgress.getX() + disX; | |||||
// Log.e("tag", "disX="+disX+",llX="+llX+",mHorizonalProgress.getWidth()="+mHorizonalProgress.getWidth()); | |||||
//校正边界,反正滑块划出 | |||||
llX = checkoundary(llX); | |||||
mCircleProgress.setX(llX); | |||||
//计算进度条百分比 | |||||
newProgress = getProgress(llX); | |||||
//更新进度条 | |||||
updateProgress(newProgress); | |||||
break; | |||||
case MotionEvent.ACTION_UP: | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
return true; | |||||
} | |||||
}); | |||||
} | |||||
/** | |||||
* 绘制横向进度条 | |||||
*/ | |||||
public void initHorizonalProgress(){ | |||||
// Log.e("tag", "mCircleProgress.getWidth()="+mCircleProgress.getWidth()); | |||||
//设置边距,左右空出滑块半径的距离 | |||||
LayoutParams hp_lp = new LayoutParams(LayoutParams.MATCH_PARENT,(int) horizonalProgressHeight); | |||||
hp_lp.leftMargin = mCircleProgress.getWidth()/2; | |||||
hp_lp.rightMargin = mCircleProgress.getWidth()/2; | |||||
hp_lp.addRule(RelativeLayout.CENTER_VERTICAL); | |||||
mHorizonalProgress.setLayoutParams(hp_lp); | |||||
} | |||||
/** | |||||
* 校正边界 | |||||
* @return | |||||
*/ | |||||
public float checkoundary(float llX){ | |||||
if(llX<0){ | |||||
llX = 0f; | |||||
}else if(llX>mHorizonalProgress.getWidth()){ | |||||
llX = mHorizonalProgress.getWidth(); | |||||
} | |||||
return llX; | |||||
} | |||||
/** | |||||
* 换算百分比 | |||||
*/ | |||||
public int getProgress(float llX){ | |||||
return (int) ((llX/mHorizonalProgress.getWidth())*100); | |||||
} | |||||
/** | |||||
* 更新进度 | |||||
* @param newProgress | |||||
*/ | |||||
public void updateProgress(int newProgress){ | |||||
// Log.e("tag", "newProgress="+newProgress); | |||||
mCircleProgress.setProgress(newProgress); | |||||
mHorizonalProgress.setProgress(newProgress); | |||||
} | |||||
} |
@@ -0,0 +1,6 @@ | |||||
package com.bonait.bnframework.common.myprogress; | |||||
public interface ResponseOnTouch { | |||||
void onTouchResponse(int volume); | |||||
} |
@@ -0,0 +1,316 @@ | |||||
package com.bonait.bnframework.common.myprogress; | |||||
import android.animation.ValueAnimator; | |||||
import android.app.Activity; | |||||
import android.content.Context; | |||||
import android.content.res.TypedArray; | |||||
import android.graphics.Canvas; | |||||
import android.graphics.Color; | |||||
import android.graphics.Paint; | |||||
import android.text.TextPaint; | |||||
import android.util.AttributeSet; | |||||
import android.util.DisplayMetrics; | |||||
import android.util.TypedValue; | |||||
import android.view.MotionEvent; | |||||
import android.view.View; | |||||
import android.view.animation.AccelerateInterpolator; | |||||
import com.bonait.bnframework.R; | |||||
/** | |||||
* Created by xuxinghai on 09/05/16. | |||||
* 设置字体大小专用 | |||||
*/ | |||||
public class SlideSelectView extends View { | |||||
//小圆半径 | |||||
private static final float RADIU_SMALL = 15; | |||||
//大圆半径 | |||||
private static final float RADIU_BIG = 22; | |||||
private static final float RADIU_BIGS = 23; | |||||
//线的高度 | |||||
private static float HEIGHT_LINE = 2; | |||||
//线距离两头的边距 | |||||
// private static float MARGEN_LINE = RADIU_BIG * 3; | |||||
private static float MARGEN_LINE = 33; | |||||
//小圆的数量 | |||||
private int countOfSmallCircle; | |||||
//小圆的横坐标 | |||||
private float circlesX[]; | |||||
private Context mContext; | |||||
//画笔 | |||||
private Paint mPaint; | |||||
//文字画笔 | |||||
private TextPaint mTextPaint; | |||||
//控件高度 | |||||
private float mHeight; | |||||
//控件宽度 | |||||
private float mWidth; | |||||
//大圆的横坐标 | |||||
private float bigCircleX; | |||||
//是否是手指跟随模式 | |||||
private boolean isFollowMode; | |||||
//手指按下的x坐标 | |||||
private float startX; | |||||
//文字大小 | |||||
private float textSize; | |||||
//文字宽度 | |||||
private float textWidth; | |||||
//当前大球距离最近的位置 | |||||
private int currentPosition; | |||||
//小圆之间的间距 | |||||
private float distanceX; | |||||
//利率文字 | |||||
private String[] text4Rates; | |||||
//依附效果实现 | |||||
private ValueAnimator valueAnimator; | |||||
//用于纪录松手后的x坐标 | |||||
private float currentPositionX; | |||||
private onSelectListener selectListener; | |||||
public SlideSelectView(Context context) { | |||||
this(context, null); | |||||
} | |||||
public SlideSelectView(Context context, AttributeSet attrs) { | |||||
super(context, attrs); | |||||
mContext = context; | |||||
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SlideSelectView); | |||||
countOfSmallCircle = a.getInt(R.styleable.SlideSelectView_circleCount, 5); | |||||
textSize = a.getInt(R.styleable.SlideSelectView_sstextSize, (int) TypedValue.applyDimension( | |||||
TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics())); | |||||
a.recycle(); | |||||
mPaint = new Paint(); | |||||
mPaint.setColor(Color.GRAY); | |||||
mPaint.setAntiAlias(true); | |||||
textSize = TypedValue.applyDimension( | |||||
TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics()); | |||||
mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); | |||||
mTextPaint.setColor(Color.GRAY); | |||||
mTextPaint.setTextSize(textSize); | |||||
currentPosition = countOfSmallCircle / 2; | |||||
} | |||||
/** | |||||
* 设置显示文本 | |||||
* | |||||
* @param strings | |||||
*/ | |||||
public void setString(String[] strings) { | |||||
text4Rates = strings; | |||||
textWidth = mTextPaint.measureText(text4Rates[0]); | |||||
if (countOfSmallCircle != text4Rates.length) { | |||||
throw new IllegalArgumentException("the count of small circle must be equal to the " + | |||||
"text array length !"); | |||||
} | |||||
} | |||||
public int getCurrentPosition() { | |||||
return currentPosition; | |||||
} | |||||
public void setCurrentPosition(int currentPosition) { | |||||
this.currentPosition = currentPosition; | |||||
} | |||||
/** | |||||
* 设置监听器 | |||||
* | |||||
* @param listener | |||||
*/ | |||||
public void setOnSelectListener(onSelectListener listener) { | |||||
selectListener = listener; | |||||
} | |||||
@Override | |||||
protected void onDraw(Canvas canvas) { | |||||
//画中间的线 | |||||
mPaint.setStyle(Paint.Style.STROKE); | |||||
mPaint.setStrokeWidth(HEIGHT_LINE); | |||||
canvas.drawLine(MARGEN_LINE, mHeight / 2, mWidth - MARGEN_LINE, mHeight / 2, | |||||
mPaint); | |||||
mPaint.setStyle(Paint.Style.FILL); | |||||
mPaint.setStrokeWidth(HEIGHT_LINE); | |||||
for (int i = 0; i < countOfSmallCircle; i++) { | |||||
canvas.drawLine(circlesX[i], mHeight / 2,circlesX[i], mHeight / 2-12, | |||||
mPaint); | |||||
} | |||||
// //画小圆 | |||||
// mPaint.setStyle(Paint.Style.FILL); | |||||
// for (int i = 0; i < countOfSmallCircle; i++) { | |||||
// canvas.drawCircle(circlesX[i], mHeight / 2, RADIU_SMALL, mPaint); | |||||
// } | |||||
//画文字 | |||||
canvas.drawText(text4Rates[currentPosition], circlesX[currentPosition] - textWidth / 2, | |||||
(mHeight / 2) - RADIU_BIG - | |||||
RADIU_SMALL, | |||||
mTextPaint); | |||||
//画大圆的默认位置 | |||||
mPaint.setStyle(Paint.Style.FILL); | |||||
mPaint.setStrokeWidth(2); | |||||
mPaint.setColor(Color.WHITE); | |||||
canvas.drawCircle(bigCircleX, mHeight / 2, RADIU_BIG, mPaint); | |||||
//画大圆的默认位置 | |||||
mPaint.setStyle(Paint.Style.STROKE); | |||||
mPaint.setStrokeWidth(2); | |||||
mPaint.setColor(Color.GRAY); | |||||
canvas.drawCircle(bigCircleX, mHeight / 2, RADIU_BIGS, mPaint); | |||||
} | |||||
@Override | |||||
public boolean onTouchEvent(MotionEvent event) { | |||||
switch (event.getActionMasked()) { | |||||
case MotionEvent.ACTION_DOWN: | |||||
startX = event.getX(); | |||||
//如果手指按下的x坐标与大圆的x坐标的距离小于半径,则是follow模式 | |||||
if (Math.abs(startX - bigCircleX) <= RADIU_BIG) { | |||||
isFollowMode = true; | |||||
} else { | |||||
isFollowMode = false; | |||||
} | |||||
break; | |||||
case MotionEvent.ACTION_MOVE: | |||||
//如果是follow模式,则大圆跟随手指移动 | |||||
if (isFollowMode) { | |||||
//防止滑出边界 | |||||
if (event.getX() >= MARGEN_LINE && event.getX() <= (mWidth - MARGEN_LINE)) { | |||||
//Log.d("TAG", "event.getX()=" + event.getX() + "__mWidth=" + mWidth); | |||||
bigCircleX = event.getX(); | |||||
int position = (int) ((event.getX() - MARGEN_LINE) / (distanceX / 2)); | |||||
//更新当前位置 | |||||
currentPosition = (position + 1) / 2; | |||||
invalidate(); | |||||
} | |||||
} | |||||
break; | |||||
case MotionEvent.ACTION_UP: | |||||
if (isFollowMode) { | |||||
float endX = event.getX(); | |||||
//当前位置距离最近的小白点的距离 | |||||
float currentDistance = endX - MARGEN_LINE - currentPosition * distanceX; | |||||
if ((currentPosition == 0 && currentDistance < 0) || (currentPosition == (text4Rates.length - 1) && currentDistance > 0)) { | |||||
if (null != selectListener) { | |||||
selectListener.onSelect(currentPosition); | |||||
} | |||||
return true; | |||||
} | |||||
currentPositionX = bigCircleX; | |||||
valueAnimator = ValueAnimator.ofFloat(currentDistance); | |||||
valueAnimator.setInterpolator(new AccelerateInterpolator()); | |||||
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { | |||||
@Override | |||||
public void onAnimationUpdate(ValueAnimator animation) { | |||||
float slideDistance = (float) animation.getAnimatedValue(); | |||||
bigCircleX = currentPositionX - slideDistance; | |||||
invalidate(); | |||||
} | |||||
}); | |||||
valueAnimator.setDuration(100); | |||||
valueAnimator.start(); | |||||
if (null != selectListener) { | |||||
selectListener.onSelect(currentPosition); | |||||
} | |||||
} | |||||
break; | |||||
} | |||||
return true; | |||||
} | |||||
@Override | |||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) { | |||||
super.onSizeChanged(w, h, oldw, oldh); | |||||
mHeight = h; | |||||
mWidth = w; | |||||
//计算每个小圆点的x坐标 | |||||
circlesX = new float[countOfSmallCircle]; | |||||
distanceX = (mWidth - MARGEN_LINE * 2) / (countOfSmallCircle - 1); | |||||
for (int i = 0; i < countOfSmallCircle; i++) { | |||||
circlesX[i] = i * distanceX + MARGEN_LINE; | |||||
} | |||||
bigCircleX = circlesX[currentPosition]; | |||||
} | |||||
@Override | |||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | |||||
int screenSize[] = getScreenSize((Activity) mContext); | |||||
int resultWidth; | |||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec); | |||||
int widthMode = MeasureSpec.getMode(widthMeasureSpec); | |||||
if (widthMode == MeasureSpec.EXACTLY) { | |||||
resultWidth = widthSize; | |||||
} else { | |||||
resultWidth = screenSize[0]; | |||||
if (widthMode == MeasureSpec.AT_MOST) { | |||||
resultWidth = Math.min(widthSize, screenSize[0]); | |||||
} | |||||
} | |||||
int resultHeight; | |||||
int heightSize = MeasureSpec.getSize(heightMeasureSpec); | |||||
int heightMode = MeasureSpec.getMode(heightMeasureSpec); | |||||
if (heightMode == MeasureSpec.EXACTLY) { | |||||
resultHeight = heightSize; | |||||
} else { | |||||
resultHeight = (int) (RADIU_BIG * 6); | |||||
if (heightMode == MeasureSpec.AT_MOST) { | |||||
resultHeight = Math.min(heightSize, resultHeight); | |||||
} | |||||
} | |||||
setMeasuredDimension(resultWidth, resultHeight); | |||||
} | |||||
private static int[] getScreenSize(Activity activity) { | |||||
DisplayMetrics metrics = new DisplayMetrics(); | |||||
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); | |||||
return new int[]{metrics.widthPixels, metrics.heightPixels}; | |||||
} | |||||
public interface onSelectListener { | |||||
public void onSelect(int index); | |||||
} | |||||
} |
@@ -11,12 +11,15 @@ import android.os.Bundle; | |||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||
import android.view.View; | import android.view.View; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import android.widget.TextView; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.common.base.BaseFragment; | import com.bonait.bnframework.common.base.BaseFragment; | ||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS; | import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_SILOS; | import com.bonait.bnframework.common.db.mode.BPA_SILOS; | ||||
import com.bonait.bnframework.common.myprogress.CustomSeekbar; | |||||
import com.bonait.bnframework.common.myprogress.ResponseOnTouch; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_plc_control; | import com.bonait.bnframework.modules.home.fragment.mode.fragment_plc_control; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_silos_cl; | import com.bonait.bnframework.modules.home.fragment.mode.fragment_silos_cl; | ||||
import com.orhanobut.logger.Logger; | import com.orhanobut.logger.Logger; | ||||
@@ -40,6 +40,8 @@ public class SystemCsMonitorFragment extends BaseFragment { | |||||
@BindView(R.id.fanzhuandianji) | @BindView(R.id.fanzhuandianji) | ||||
TextView fanzhuandianji;//工序子集 | TextView fanzhuandianji;//工序子集 | ||||
private Context context; | private Context context; | ||||
monitor_adapter adapter; | monitor_adapter adapter; | ||||
@@ -207,7 +207,19 @@ android:orientation="vertical"> | |||||
android:layout_width="0dp" | android:layout_width="0dp" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
android:layout_height="match_parent"> | android:layout_height="match_parent"> | ||||
<com.bonait.bnframework.common.myprogress.MyProgress | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
app:circleProgressRadus="50dp" | |||||
app:horizonalProgressHeight="10dp" | |||||
app:textProgressSize="10sp" | |||||
app:colorProgress="#fd9112" | |||||
app:colorSecondProgress="#1592ff" | |||||
/> | |||||
<SeekBar android:id="@+id/jb_dw" | <SeekBar android:id="@+id/jb_dw" | ||||
android:visibility="gone" | |||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:layout_marginRight="@dimen/dp_10" | android:layout_marginRight="@dimen/dp_10" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
@@ -10,6 +10,7 @@ | |||||
android:layout_height="match_parent" | android:layout_height="match_parent" | ||||
android:orientation="vertical" | android:orientation="vertical" | ||||
android:background="@color/main_background"> | android:background="@color/main_background"> | ||||
<ScrollView | <ScrollView | ||||
android:layout_marginTop="20dp" | android:layout_marginTop="20dp" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
@@ -8,4 +8,17 @@ | |||||
<attr name="imagesrc_ks" format="reference" /> | <attr name="imagesrc_ks" format="reference" /> | ||||
<attr name="imagesrc_tz" format="reference" /> | <attr name="imagesrc_tz" format="reference" /> | ||||
</declare-styleable> | </declare-styleable> | ||||
<declare-styleable name="myMagicProgress"> | |||||
<attr name="circleProgressRadus" format="dimension"/> | |||||
<attr name="horizonalProgressHeight" format="dimension"/> | |||||
<attr name="textProgressSize" format="dimension"/> | |||||
<attr name="colorProgress" format="reference|color"/> | |||||
<attr name="colorSecondProgress" format="reference|color"/> | |||||
</declare-styleable> | |||||
<declare-styleable name="SlideSelectView"> | |||||
<attr name="circleCount" format="integer"></attr> | |||||
<attr name="sstextSize" format="integer"></attr> | |||||
</declare-styleable> | |||||
</resources> | </resources> |
@@ -44,4 +44,10 @@ | |||||
<dimen name="textSize">14dp</dimen> | <dimen name="textSize">14dp</dimen> | ||||
<dimen name="textTitleSize">16sp</dimen> | <dimen name="textTitleSize">16sp</dimen> | ||||
<dimen name="TitleSize">18sp</dimen> | <dimen name="TitleSize">18sp</dimen> | ||||
<dimen name="text_size_14">14sp</dimen> | |||||
<dimen name="text_size_12">12sp</dimen> | |||||
<dimen name="text_size_10">10sp</dimen> | |||||
<dimen name="text_size_16">16sp</dimen> | |||||
<dimen name="radus_dp">60dp</dimen> | |||||
</resources> | </resources> |