自定义View之 继承View

逃离我推掉我的手 2022-06-12 14:21 370阅读 0赞

效果图,点击按钮增加圆圈


自定义View源代码

  1. package com.example.administrator.youku_animi.MyView;
  2. import android.content.Context;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.Paint;
  6. import android.graphics.RectF;
  7. import android.util.AttributeSet;
  8. import android.view.View;
  9. import android.view.WindowManager;
  10. /** * Created by Administrator on 2017/7/24 0024. */
  11. public class NewView extends View {
  12. int mWindowWidth;
  13. //中心点
  14. int mCircleXY ;
  15. float mSweepAngle = 25f;
  16. float mRadius;
  17. RectF mArcRectF;
  18. Paint mCirclePaint, mArcPaint, mTextPaint;
  19. String mShowText;
  20. int mShowTextSize;
  21. public NewView(Context context, AttributeSet attrs)
  22. {
  23. super(context, attrs);
  24. WindowManager wm = (WindowManager) getContext()
  25. .getSystemService(Context.WINDOW_SERVICE);
  26. mWindowWidth = wm.getDefaultDisplay().getWidth();
  27. mCircleXY = mWindowWidth / 2;
  28. mRadius = (float) (mWindowWidth*0.5/2) ;
  29. mShowText = "It 's OK";
  30. mShowTextSize = mShowText.length();
  31. mArcRectF = new RectF(
  32. (float)(mWindowWidth*0.2),
  33. (float)(mWindowWidth*0.2),
  34. (float)(mWindowWidth*0.8),
  35. (float)(mWindowWidth*0.8)
  36. );
  37. mCirclePaint = new Paint();
  38. //给画笔设置颜色
  39. mCirclePaint.setColor(getResources().getColor(android.R.color.holo_blue_bright));
  40. mCirclePaint.setStyle(Paint.Style.FILL);
  41. mCirclePaint.setStrokeWidth(4);
  42. mArcPaint= new Paint();
  43. mArcPaint.setColor(getResources().getColor(android.R.color.holo_red_dark));
  44. mArcPaint.setStyle(Paint.Style.STROKE);
  45. mArcPaint.setStrokeWidth(20);
  46. mTextPaint = new Paint();
  47. mTextPaint.setColor(getResources().getColor(android.R.color.secondary_text_light));
  48. mTextPaint.setStyle(Paint.Style.STROKE);
  49. //设置画笔粗细
  50. mTextPaint.setStrokeWidth(1);
  51. //设置文字居中
  52. mTextPaint.setTextAlign(Paint.Align.CENTER);
  53. //设置抗锯齿
  54. mTextPaint.setAntiAlias(true);
  55. //设置文字大小
  56. mTextPaint.setTextSize(100);
  57. }
  58. @Override
  59. protected void onDraw(Canvas canvas)
  60. {
  61. //绘制圆
  62. canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
  63. //绘制弧线
  64. canvas.drawArc(mArcRectF, 270, mSweepAngle, false, mArcPaint);
  65. //绘制文字
  66. canvas.drawText(mShowText, 0, mShowTextSize,
  67. mCircleXY, mCircleXY + (mShowTextSize / 4), mTextPaint);
  68. // canvas.save();
  69. super.onDraw(canvas);
  70. // canvas.restore();
  71. }
  72. //改变外圆的角度
  73. public void setmSweepValue(float sweepValue)
  74. {
  75. if (sweepValue != 0)
  76. {
  77. mSweepAngle += 5;
  78. }
  79. else
  80. {
  81. mSweepAngle = 25;
  82. }
  83. this.invalidate();
  84. }
  85. }

xml布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:newview="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
  3. <com.example.administrator.youku_animi.MyView.NewView android:id="@+id/newview_test" android:layout_width="match_parent" android:layout_height="500dp" />
  4. <Button android:id="@+id/btn" android:text="click" android:layout_width="match_parent" android:layout_height="wrap_content" />
  5. </LinearLayout>

Activity..

  1. package com.example.administrator.youku_animi;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import com.example.administrator.youku_animi.MyView.NewView;
  7. /** * Created by Administrator on 2017/7/24 0024. */
  8. public class NewViewTest extends Activity {
  9. NewView newView;
  10. Button button;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState)
  13. {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.new_view_test);
  16. newView = (NewView) findViewById(R.id.newview_test);
  17. button = (Button) findViewById(R.id.btn);
  18. button.setOnClickListener(new View.OnClickListener()
  19. {
  20. @Override
  21. public void onClick(View view)
  22. {
  23. newView.setmSweepValue(1);
  24. }
  25. });
  26. }
  27. }

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读