《二维码导包 改写build.gradle里面的minSdkVersion改成16,在project structure里面导入libzing包》
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.example.adminjs.jiaosheng11004"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:26.+'
compile project(':libzxing')
}
《-----布局-------》
<?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="50dp"
android:orientation="horizontal"
android:background="#D4DBED">
<Button
android:id="@+id/left_btn"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="返回"
/>
<TextView
android:layout_weight="1"
android:gravity="center"
android:text="那些花儿"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/right_btn"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.adminjs.jiaosheng11004.MainActivity">
<com.example.adminjs.jiaosheng11004.TitleView
android:id="@+id/titleview_id"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.example.adminjs.jiaosheng11004.TitleView>
<Button
android:id="@+id/butt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="扫描二维码"
android:layout_below="@+id/yout"/>
<com.example.adminjs.jiaosheng11004.view.CustomProgressView
android:id="@+id/custom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/butt"
/>
</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="match_parent"
android:orientation="vertical">
<com.example.adminjs.jiaosheng11004.TitleView
android:id="@+id/titleview_id"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.example.adminjs.jiaosheng11004.TitleView>
<com.example.adminjs.jiaosheng11004.view.CustmuProgressView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
《----主页面------》
package com.example.adminjs.jiaosheng11004;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.adminjs.jiaosheng11004.view.CustomProgressView;
public class MainActivity extends Activity implements TitleView.MyCallBack{
// private Button hui;
private Button but;
private CustomProgressView progres;
private Button butt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progres = (CustomProgressView) findViewById(R.id.custom);
// hui = (Button) findViewById(R.id.fan);
Button but = (Button) findViewById(R.id.right_btn);
butt = (Button) findViewById(R.id.butt);
/* hui.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "返回按钮", Toast.LENGTH_SHORT).show();
}
});*/
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MactActivity.class);
startActivity(intent);
}
});
TitleView titleView = (TitleView) findViewById(R.id.titleview_id);
titleView.setCallBack(this);
butt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progres.start();
}
});
}
@Override
public void leftClick() {
Toast.makeText(this, "left", Toast.LENGTH_SHORT).show();
}
@Override
public void rightClick() {
Toast.makeText(this, "right", Toast.LENGTH_SHORT).show();
}
}
《-----接口回调-----》
《TitleView》
package com.example.adminjs.jiaosheng11004;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
/**
* Created by muhanxi on 17/11/4.
*/
public class TitleView extends LinearLayout {
public TitleView(Context context) {
super(context);
}
public TitleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
View view = LayoutInflater.from(context).inflate(R.layout.item_layout,null);
view.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
addView(view);
Button buttonLeft = (Button) view.findViewById(R.id.left_btn);
Button buttonRight = (Button) view.findViewById(R.id.right_btn);
buttonLeft.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
callBack.leftClick();
}
});
buttonRight.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
callBack.rightClick();
}
});
}
public TitleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private MyCallBack callBack ;
public void setCallBack(MyCallBack callBack){
this.callBack = callBack;
}
public interface MyCallBack {
public void leftClick();
public void rightClick();
}
}
《CViewGroup》
package com.example.adminjs.jiaosheng11004;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
/**
* Created by Adminjs on 2017/11/4.
*/
public class CViewGroup extends LinearLayout{
public CViewGroup(Context context) {
super(context);
}
public CViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
《---圆进度条----》
package com.example.adminjs.jiaosheng11004.view;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import com.xys.libzxing.zxing.activity.CaptureActivity;
/**
* Created by Adminjs on 2017/11/4.
*/
public class CustomProgressView extends View {
//定义一个画笔
private Paint paint;
private int progress = 0;
Context context;
public CustomProgressView(Context context) {
super(context);
}
public CustomProgressView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
//创建一个画笔
paint = new Paint();
// 抗锯齿
paint.setAntiAlias(true);
//设置画笔的颜色
paint.setColor(Color.RED);
//设置画笔 填充是空心的
paint.setStyle(Paint.Style.STROKE);
}
public void start(){
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (progress >= 360) {
Intent intent = new Intent(context, CaptureActivity.class);
context.startActivity(intent);
return;
}
progress += 10;
//子线程刷新 系统调用onDraw() 方法
postInvalidate();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int x = getWidth() / 2;
int y = getHeight() / 2;
int radius = 100;
paint.setStrokeWidth(20);
RectF rectF = new RectF(x - radius, y - radius, x + radius, y + radius);
canvas.drawArc(rectF, -90, progress, false, paint);
int text = (int) ((float) progress / 360 * 100);
float textWidth = paint.measureText(text + "%");
Rect rextText = new Rect();
paint.getTextBounds(text + "%", 0, (text + "%").length(), rextText);
paint.setTextSize(30);
paint.setStrokeWidth(1);
//画文字
canvas.drawText(text + "%", x - textWidth / 2, y + rextText.height() / 2, paint);
}
}
《---梯形布局----》
package com.example.adminjs.jiaosheng11004.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by Adminjs on 2017/11/4.
*/
public class CustmuProgressView extends View {
Context context;
public CustmuProgressView(Context context) {
super(context);
}
public CustmuProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustmuProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustmuProgressView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setTextSize(10);
paint.setColor(Color.BLACK);
Rect rect = new Rect(0,0,150,80);
canvas.drawRect(rect,paint);
Paint pain = new Paint();
pain.setTextSize(10);
pain.setColor(Color.RED);
Rect rect1 = new Rect(150,150,300,160);
canvas.drawRect(rect1,pain);
Paint pain3 = new Paint();
pain3.setTextSize(10);
pain3.setColor(Color.BLUE);
Rect rect2 = new Rect(150,150,300,160);
canvas.drawRect(rect2,pain3);
canvas.drawRect(150,80,300,160,paint);
canvas.drawRect(300,160,500,250,pain);
canvas.drawRect(150,80,300,160,pain3);
}
}
《---编写俩个次主页面 分别导入圆和梯形》
《清单列表》
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.adminjs.jiaosheng11004">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MunActivity" />
<activity android:name=".MactActivity"/>
</application>
</manifest>
自定义View+接口回调 圆进度条+二维码+梯形布局
最新推荐文章于 2018-02-18 11:17:55 发布