转自他人,但记不清了
public class ProgressView extends View {
private RectF mRectF;
private Paint mPaint;
private int paintColor;//画笔颜色
private int mStrokeWidth=8;//进度条圆弧宽度
private float mMaxProgress=100;//最大进度条
private float mProgress=0;
public ProgressView(Context context)
{
this(context,null);
}
public ProgressView(Context context, @Nullable AttributeSet attrs)
{
this(context,attrs,0);
}
public ProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
{
super(context,attrs,defStyleAttr);
mRectF=new RectF();
mPaint=new Paint();
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int width=this.getWidth();
int height=this.getHeight();
if(width!=height)
{
int min= Math.min(width,height);
width=min;
height=min;
}
// 位置
mRectF.left=mStrokeWidth/2;
mRectF.top=mStrokeWidth/2;
mRectF.right=width-mStrokeWidth/2;
mRectF.bottom=height-mStrokeWidth/2;
//设置画布为透明
canvas.drawColor(Color.TRANSPARENT);
//画半个透明的圆当背景
mPaint.setColor(Color.parseColor("#33000000"));
mPaint.setStyle(Paint.Style.FILL);
canvas.drawOval(mRectF,mPaint);
//设置笔画
mPaint.setAntiAlias(true);
mPaint.setColor(paintColor);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mStrokeWidth);
canvas.drawArc(mRectF,-90,-(mProgress/mMaxProgress)*360,false,mPaint);
}
/**
* 设置画笔颜色
* @param color
*/
public void setPaintColor(String color)
{
paintColor= Color.parseColor(color);
}
/**
* 设置最大进度的事件
* @param time 倒计时时间 毫秒值
*/
public void startDownTime(final long time,final OnFinishListener listener)
{
mMaxProgress=100;
new Thread(new Runnable() {
@Override
public void run() {
for(int i=(int)mMaxProgress;i>=0;i--)
{
try {
Thread.sleep((long)(time/mMaxProgress));
//当倒计时结束时通知
if(i==0&&listener!=null)
{
post(new Runnable() {
@Override
public void run() {
listener.onFinish();
}
});
}
} catch (InterruptedException e) {
e.printStackTrace();
}
mProgress=(float)i;
com.example.yunzhi.ProgressView.this.postInvalidate();
}
}
}).start();
}
}
public class Msg {
public static final int TYPE_SENT = 1;
public static final int TYPE_RECEIVED = 0;
public String content;
private int type;
public Msg(String content, int type) {
this.content = content;
this.type = type;
}
public String getContent() {
return content;
}
public int getType() {
return type;
}
}
public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder>{
private List<Msg> mMsgList;
static class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout leftLayout;
LinearLayout rightLayout;
TextView leftMsg;
TextView rightMsg;
public ViewHolder(@NonNull View itemView) {
super(itemView);
leftLayout = itemView.findViewById(R.id.left_layout);
rightLayout = itemView.findViewById(R.id.right_layout);
leftMsg = itemView.findViewById(R.id.left_msg);
rightMsg = itemView.findViewById(R.id.right_msg);
}
}
public MsgAdapter(List<Msg> mMsgList) {
this.mMsgList = mMsgList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.msg_item, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
Msg msg = mMsgList.get(i);
if (msg.getType() == Msg.TYPE_RECEIVED) {
viewHolder.leftLayout.setVisibility(View.VISIBLE);
viewHolder.rightLayout.setVisibility(View.GONE);
viewHolder.leftMsg.setText(msg.getContent());
} else {
viewHolder.leftLayout.setVisibility(View.GONE);
viewHolder.rightLayout.setVisibility(View.VISIBLE);
viewHolder.rightMsg.setText(msg.getContent());
}
}
@Override
public int getItemCount() {
return mMsgList.size();
}
}
public class SplashActivity extends AppCompatActivity {
private ProgressView mProgressView;
private RelativeLayout mRelEnter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏
ActionBar actionBar=getSupportActionBar();
if(actionBar!=null) {
actionBar.hide();
}
setContentView(R.layout.activity_splash);
initView();
}
private void initView()
{
mRelEnter=(RelativeLayout)findViewById(R.id.rl_center);
mProgressView=(ProgressView)findViewById(R.id.progress);
//跳过点击事件
mRelEnter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
enterMain();
}
});
//设置进度条颜色
mProgressView.setPaintColor("#ff0000");
//开始倒计时
mProgressView.startDownTime(3500, new OnFinishListener() {
@Override
public void onFinish() {
enterMain();
}
});
}
private void enterMain()
{
startActivity(new Intent(this,MainActivity.class));
finish();
}
}
public interface OnFinishListener {
void onFinish();
}