自定义View画圆(观察者模式)
来源:互联网 发布:安卓手游辅助软件 编辑:程序博客网 时间:2024/05/20 21:44
***ToothView类***public class ToothView extends View { //红色 public static final int COLOR_RED=Color.RED; //画笔的宽度 public static final int PAINT_WIDTH=5; //圆的半径 public static final int RADIO=40; //圆位置的X坐标 public static final int X=100; //圆位置的Y坐标 public static final int Y=100; //定义一个对象 ClickCirle circleListener; public ToothView(Context context) { super(context); } public ToothView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public ToothView(Context context, AttributeSet attrs) { super(context, attrs); } //测量高度 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } //绘制图形 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //调用绘制圆的方法 Circle(canvas); } //设置布局 @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } //绘制圆的方法 public void Circle(Canvas canvas){ //声明一个画笔 Paint paint=new Paint(); //设置画笔的样式、颜色 paint.setColor(COLOR_RED); //设置空心圆 paint.setStyle(Paint.Style.STROKE); //设置画笔的宽度 paint.setStrokeWidth(PAINT_WIDTH); //设置锯齿true表示抗锯齿,false表示不抗锯齿 paint.setAntiAlias(true); //绘制圆 canvas.drawCircle(X,Y,RADIO,paint); } //封装一个监听的方法 public void setCircleListener(ClickCirle circleListener) { this.circleListener = circleListener; } //观察者模式 public interface ClickCirle{ //点击的方法 public void click(); } @Override public boolean onTouchEvent(MotionEvent event) { //获取当前的位置 float x=event.getX(); float y=event.getY(); //调用点击事件方法 ClickWhere(x,y); return super.onTouchEvent(event); } //封装判断点击的方法 public void ClickWhere(float x,float y){ int distanx =(int) ((x-X)*(x-X)); int distany =(int) ((y-Y)*(y-Y)); //求和 int sum=distanx+distany; if(sum<RADIO*RADIO){ //设置观察者 if(null!=circleListener){ circleListener.click(); } } }***主方法***public class MainActivity extends AppCompatActivity { ToothView tooth_main; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tooth_main = (ToothView)findViewById(R.id.tooth_main); tooth_main.setCircleListener(new ToothView.ClickCirle() { @Override public void click() { Toast.makeText(getApplicationContext(), "方法被点击", Toast.LENGTH_LONG).show(); } }); }
1 0
- 自定义View画圆(观察者模式)
- 观察者模式(自定义监听器)
- 自定义事件(观察者模式)
- 自定义观察者设计模式
- android自定义观察者模式
- 自定义View画出手机通讯录中右边字母,并设置TouchEvent/观察者模式
- 接口和自定义观察者模式
- Java进阶(极客)——观察者模式(一)概述及自定义观察者模式
- Android自定义View之用观察者模式写自定义监听事件以及常用竖直型字母索引栏的写法
- java事件处理机制(自定义事件)/观察者模式
- 谈谈JS的观察者模式(自定义事件)
- 谈谈JS的观察者模式(自定义事件)
- 自定义View组合模式
- 设计模式之Java自定义观察者模式
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(转)
- Android - NETD解读
- windows 7 共享打印机 给 window xp - 2/2
- 哲学家多线程问题
- View Frame、bounds、clipsToBounds、masksToBounds
- iOS - 知识库
- 自定义View画圆(观察者模式)
- 熟悉以下预处理标识符__LINE__ __FILE__ __DATE__ __TIME__ # ##
- CopyOnWriteArrayList详解
- 科学计算器——大一数据结构课设
- c#调用带参数或返回值的存储过程
- Android 打造形形色色的进度条 实现可以如此简单
- Angular 2 组件之间如何通信?
- 状态机FSM的描述方法
- Spring中监听器的详解