自定义View+接口回调 圆进度条+二维码+梯形布局

来源:互联网 发布:charcodeat js 编辑:程序博客网 时间:2024/06/05 15:57
《二维码导包 改写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>
阅读全文
0 0
原创粉丝点击