自定义view圆形进度条,矩形与二维码
2017-11-05 19:09
411 查看
主界面布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <LinearLayout android:id="@+id/liner_title" android:layout_width="match_parent" android:layout_height="50dp" android:background="#D4DBED" android:orientation="horizontal"> <Button android:id="@+id/but01" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="《"/> <TextView android:gravity="center" android:id="@+id/text_view" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" android:text="那些花儿"/> <Button android:id="@+id/but002" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="进入"/> </LinearLayout> <Button android:id="@+id/but03" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="扫描二维码" /> <shidongliang.bwei.com.zhoukaoonedemo.view.CustomProgess android:id="@+id/custom_path" android:layout_below="@+id/titleview_id" android:layout_width="match_parent" android:layout_height="match_parent" /> </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" > <LinearLayout android:id="@+id/liner_title" android:layout_width="match_parent" android:layout_height="50dp" android:background="#D4DBED" android:orientation="horizontal"> <Button android:id="@+id/but01" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="《"/> <TextView android:gravity="center" android:id="@+id/text_view" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" android:text="那些花儿"/> <Button android:id="@+id/but02" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="进入"/> </LinearLayout> <shidongliang.bwei.com.zhoukaoonedemo.view.CustomViewGroup android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 主页Main: package shidongliang.bwei.com.zhoukaoonedemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import shidongliang.bwei.com.zhoukaoonedemo.view.CustomProgess; public class MainActivity extends AppCompatActivity { private Button but01; private Button but002; private Button but03; private CustomProgess progres; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); but01 = (Button) findViewById(R.id.but01); but002 = (Button) findViewById(R.id.but002); but03 = (Button) findViewById(R.id.but03); progres = (CustomProgess) findViewById(R.id.custom_path); but002.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, OneActivity.class); startActivity(intent); } }); but03.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { progres.start(); } }); } } 副页: package shidongliang.bwei.com.zhoukaoonedemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; /** * 此类的作用: * * @author: forever * @date: 2017/11/4 9:54 */ public class OneActivity extends AppCompatActivity { private Button but01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.other_main); but01 = (Button) findViewById(R.id.but01); but01.setOnClickListener(new View.OnCli 4000 ckListener() { @Override public void onClick(View view) { Intent intent = new Intent(OneActivity.this, MainActivity.class); startActivity(intent); } }); } } view: 圆形进度条: CustomProgress: package shidongliang.bwei.com.zhoukaoonedemo.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 LYY on 2017/11/4. */ public class CustomProgess extends View { private boolean running = true; private Paint paint; private int progress = 0 ; Context context ; public CustomProgess(Context context) { super(context); } public CustomProgess(Context context, AttributeSet attrs) { this(context, attrs,0); } public CustomProgess(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 (running){ if (progress >= 360) { running = false; 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); // getWidth() 获取当前View 的宽度 int x = getWidth() / 2 ; int y = getHeight() / 2 ; int radius = 200 ; //设置画笔的粗细 paint.setStrokeWidth(30); //定义一个区域 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); } } CustomProgressView: package shidongliang.bwei.com.zhoukaoonedemo.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; /** * 此类的作用: * * @author: forever * @date: 2017/11/4 8:34 */ public class CustomProgrssView extends View { Paint paint ; public CustomProgrssView(Context context) { super(context); } int progress = 0 ; int max = 360; public CustomProgrssView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); paint = new Paint(); new Thread(new Runnable() { @Override public void run() { while (true){ if(progress > 360){ return; } postInvalidate(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } progress += 36 ; } } }).start(); } public CustomProgrssView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.BLACK); canvas.drawCircle(300,300,100,paint); RectF rectF = new RectF(200,200,400,400); paint.setColor(Color.RED); paint.setStrokeWidth(20); paint.setStyle(Paint.Style.STROKE); canvas.drawArc(rectF,-90,progress,false,paint); paint.setColor(Color.WHITE); paint.setStyle(Paint.Style.FILL); int percent = progress; //中间的进度百分比,先转换成float在进行除法运算,不然都为0 float textWidth = paint.measureText(percent+" % "); paint.setTextSize(20); canvas.drawText((float)progress/(float) 360 * 100 +"%",300,300,paint); } } 矩形: package shidongliang.bwei.com.zhoukaoonedemo.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; /** * 此类的作用: * * @author: forever * @date: 2017/11/4 13:42 */ public class CustomViewGroup extends View { public CustomViewGroup(Context context) { super(context); } public CustomViewGroup(Context context, AttributeSet attrs) { super(context, attrs); } public CustomViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { 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,150); 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,450,250,pain); canvas.drawRect(150,80,300,160,pain3); } }
相关文章推荐
- 3个自定义view布局:矩形TextView,圆形进度条,圆环view
- Android 自定义view 圆形进度条1
- 【Android自定义view系列】圆形百分比进度条
- 自定义SurfaceView之音频录制圆形进度条
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android:自定义View实现绚丽的圆形进度条
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android 自定义 View 圆形进度条总结
- 自定义view学习系列之圆形进度条
- 自定义view之圆形进度条
- 自定义View(三)-圆形进度条-百分比进度条
- 自定义View画圆形进度条
- 自定义view圆形进度条,并改变百分比。
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android 自定义View -带进度的圆形进度条
- 自定义View2——画线、矩形、圆形、.写字,图像
- android 圆形进度条 自定义view
- Android 自定义 View 圆形进度条总结
- 组合View-标题栏自绘控件圆形进度条/扫描二维码/自定义ViewGroup阶梯布局
- Android自定义控件之圆形进度条ImageView