//清单文件
<!--//相机的权限-->
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<!--/震动-->
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
//activity-main.xml
//组合标题/进度条/二维码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwei.www.sixundiyizhoumoni.MainActivity">
<com.bwei.www.sixundiyizhoumoni.TitleActivity
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tit">
</com.bwei.www.sixundiyizhoumoni.TitleActivity>
<com.bwei.www.sixundiyizhoumoni.myView
android:id="@+id/circleView"
android:layout_marginTop="100dp"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center|center_horizontal"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击扫描二维码"
android:layout_gravity="center|center_horizontal"
android:id="@+id/btn_er"
android:onClick="start"/>
</LinearLayout>
//组合标题布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal"
android:background="#575b57">
<Button
android:id="@+id/btn_Vg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳转"
android:textSize="24dp"
android:background="#00000000"/>
<TextView
android:id="@+id/tv_bt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="那些花儿"
android:textSize="28dp" />
<Button
android:id="@+id/btn_sm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的"
android:textSize="24dp"
android:background="#00000000"/>
</LinearLayout>
//ViewGroup阶梯布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwei.www.sixundiyizhoumoni.MyViewGroupActivity">
<com.bwei.www.sixundiyizhoumoni.TitleActivity
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tit">
</com.bwei.www.sixundiyizhoumoni.TitleActivity>
<com.bwei.www.sixundiyizhoumoni.MViewGrroup
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="20dp"
android:background="#ff00ff"/>
<TextView
android:layout_width="80dp"
android:layout_height="20dp"
android:background="#86d1ff"/>
<TextView
android:layout_width="80dp"
android:layout_height="20dp"
android:background="#f6f609"/>
</com.bwei.www.sixundiyizhoumoni.MViewGrroup>
</LinearLayout>
//TitileActivity中继承LainLayout
package com.bwei.www.sixundiyizhoumoni;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
;
/**
* @作者
* @时间 2017/11/4 08:13
*/
public class TitleActivity extends LinearLayout{
private Button btn_vg;
private TextView tv_bt;
private Button btn_sm;
private OnmiClickLstener lister;
//定义一个对外开放的接口
interface OnmiClickLstener{
void onVgClick(View v);
void onsmClick(View v);
}
public void setOnmiClickLstener(OnmiClickLstener lister){
if(lister!=null){
this.lister = lister;
}
}
public TitleActivity(Context context) {
this(context,null);
}
public TitleActivity(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public TitleActivity(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs, defStyleAttr);
}
private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
View.inflate(context,R.layout.zuhe,this);
btn_vg = (Button) findViewById(R.id.btn_Vg);
tv_bt = (TextView) findViewById(R.id.tv_bt);
btn_sm = (Button) findViewById(R.id.btn_sm);
btn_vg.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
lister.onVgClick(view);
}
});
btn_sm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
lister.onsmClick(view);
}
});
}
}
//MainActivity 类
//标题栏hind
getSupportActionBar().hide();
package com.bwei.www.sixundiyizhoumoni;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;
import com.uuzuche.lib_zxing.activity.ZXingLibrary;
public class MainActivity extends AppCompatActivity {
private myView circleView;
int REQUEST_CODE=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ZXingLibrary.initDisplayOpinion(this);
TitleActivity tit = (TitleActivity) findViewById(R.id.tit);
tit.setOnmiClickLstener(new TitleActivity.OnmiClickLstener() {
@Override
public void onVgClick(View v) {
Intent intent = new Intent(MainActivity.this, MyViewGroupActivity.class);
startActivity(intent);
}
@Override
public void onsmClick(View v) {
Toast.makeText(MainActivity.this,"点击了按钮",Toast.LENGTH_SHORT).show();
}
});
circleView = (myView) findViewById(R.id.circleView);
}
int progress = 0;
public void start(View v) {
// 1000公里
circleView.setMax(100);
progress=0;
new Thread() {
public void run() {
while (true) {
progress = progress + 10;
String text = progress + "%";
circleView.setProgressAndText(progress, text);
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (progress == 100) {
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent,REQUEST_CODE);
break;
}
}
};
}.start();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/**
* 处理二维码扫描结果
*/
if (requestCode == REQUEST_CODE) {
//处理扫描结果(在界面上显示)
if (null != data) {
Bundle bundle = data.getExtras();
if (bundle == null) {
return;
}
if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
String result = bundle.getString(CodeUtils.RESULT_STRING);
Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}
}
}
//MyViewGroup阶梯
package com.bwei.www.sixundiyizhoumoni;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
/**
* @作者
* @时间 2017/11/4 09:03
*/
public class MViewGrroup extends ViewGroup {
public MViewGrroup(Context context) {
this(context,null);
}
public MViewGrroup(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MViewGrroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//测量子View的宽高,
measureChildren(widthMeasureSpec,heightMeasureSpec);
}
@Override
protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
//获取到控件个数
int childCount = getChildCount();
//定义临时变量
int startHeight = 0;
int startwidht = 0;
//循环遍历出每个View
for(i = 0; i<childCount; i++){
View v = getChildAt(i);
//给每个View设置自己的位置
v.layout(startwidht,startHeight,startwidht+v.getMeasuredWidth(),startHeight+v.getMeasuredHeight());
startHeight+=v.getMeasuredHeight();
startwidht+=v.getMeasuredWidth();
}
}
}
//MyView自绘控件
package com.bwei.www.sixundiyizhoumoni;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class myView extends View {
int progress = 0;
private String text="0%";
private int max = 100;
public myView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public myView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public myView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 对于画笔
Paint paint = new Paint();
// 设置抗锯齿
paint.setAntiAlias(true);
// 设置画笔颜色
// 三种样式--Stroke 只要描边 Fill 填充 FILL_AND_STROKE和既有描边又有填充
paint.setStyle(Style.STROKE);
//设置描边宽度
paint.setStrokeWidth(2);
//定义外圈员的颜色
paint.setColor(Color.RED);
//绘制圆形进度条--获取当前控件多大,正好让进度条在这个控件区间内
canvas.drawCircle(getMeasuredWidth()/2, getMeasuredWidth()/2, getMeasuredWidth()/2, paint);
//重新设置描边宽度,这个宽度最好能完全盖过圆形
paint.setStrokeWidth(3);
//定义限制圆弧的矩形,当前这样定义正好让圆弧和圆重合
RectF oval = new RectF(0, 0, getMeasuredWidth(), getMeasuredWidth());
//设置进度条(圆弧的颜色)
paint.setColor(Color.GREEN);
//绘制,设置进度条的度数从0开始,结束值是个变量,可以自己自由设置,来设置进度
//true和false 代表是否使用中心点,如果true,代表连接中心点,会出现扇形的效果
canvas.drawArc(oval, 0, 360 * progress / max, false, paint);
//文字的绘制
paint.setTextSize(40);
//设置文字宽度
paint.setStrokeWidth(1.0f);
//测量文字大小-提前准备个矩形
Rect bounds = new Rect();
//测量文字的宽和高,测量的值可以根据矩形获取
paint.getTextBounds(text, 0, text.length(), bounds);
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
//绘制文字,计算文字的宽高进行设置
canvas.drawText(text, getMeasuredWidth()/2 - bounds.width() / 2,
getMeasuredWidth()/2 + bounds.height() / 2, paint);
}
/**
* 初始设置当前进度的最大值-默认100
* @param max
*/
public void setMax(int max) {
this.max = max;
}
/**
* 更新进度和文字
* @param progress
* @param text
*/
public void setProgressAndText(int progress, String text) {
this.progress = progress;
this.text = text;
//重新绘制
postInvalidate();
}
}