自定义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
- 自定义View+接口回调 圆进度条+二维码+梯形布局
- 自定义View 梯形布局
- 自定义View实现阶梯梯形布局以及二维码的实现
- 点击加载圆形进度条,进入扫描二维码界面,接口回调,自定义view/组合view
- 圆形进度条+二维码扫描+自定义组合控件标题栏+自定义矩形view+接口回调方法
- android 自定义View 梯形布局
- Android——自定义view实现标题栏、梯形布局以及二维码扫描
- Android使用自定义view实现标题栏、梯形布局以及二维码扫描
- Android自定义View画圆+进度条+自定义View梯形
- 组合View-标题栏自绘控件圆形进度条/扫描二维码/自定义ViewGroup阶梯布局
- 自定义view圆形进度条,矩形与二维码
- view 自定义标题+点击才开始的进度条+使用二维码
- 标题布局和自定义view进度条 及自定义ViewGroup
- 扫二维码+阶梯流式布局+自定义画圆+组合view
- 自定义View---自定义进度条
- 自定义view+接口回调切换activity
- 接口回调方法刷新自定义布局
- 自定义view画带有进度条的圆
- selenium+python模拟登陆163邮箱
- 188. Best Time to Buy and Sell Stock IV
- iOS Xcode~代码块前面标记的 M,C,T等字母含义
- 接口详解,戳进来....
- Android安卓——Activity组件(1)
- 自定义View+接口回调 圆进度条+二维码+梯形布局
- 2017ACMICPC亚洲区青岛站:I:The Squared Mosquito Coil【模拟题】
- Win32Demo
- 设计模式笔记(一)设计六大原则之一--单一职责原则
- 处理图片流
- 简单的网页制作及部分代码
- hihocoder
- Android单元测试(二):Mockito框架的使用
- python模板引擎Jinja2基础