自定义控件
来源:互联网 发布:php高并发redis 编辑:程序博客网 时间:2024/06/14 06:28
public class MyView extends View{ Paint paint; int downX; int downY; Bitmap bm; private void init(){ paint = new Paint(); //设置抗锯齿 paint.setAntiAlias(true); } /** * * @param context */ public MyView(Context context) { super(context); init(); } /** * 有两个参数的构造方法 才能让控件xml布局中进行定义 * @param context * @param attrs */ public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * 在控件中进行绘制的方法 * 1、画笔 Paint * 2、画板 canvas * @param canvas */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //在屏幕上画一条线 canvas.drawLine(downX + 0,downY + 0,downX + 100,downY + 100,paint); //在屏幕上画一个矩形 paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); canvas.drawRect(downX + 30,downY + 30, downX + 200,downY + 200,paint); //在屏幕上画一个○ paint.setColor(Color.BLUE); canvas.drawCircle(downX + 100,downY + 100,50,paint); //画一个圆弧 RectF f = new RectF(); f.set(downX + 100,downY + 50,downX + 200,downY + 150); canvas.drawArc(f, 90, 180, false , paint); canvas.drawArc(f, -45, 90, true , paint); if(bm == null){ bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); } canvas.drawBitmap(bm, downX + 200,downY + 200,paint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int width; int height; switch (widthMode){ case MeasureSpec.AT_MOST: width = MeasureSpec.getSize(widthMeasureSpec); Log.i("AT_MOST========", "onMeasure: width:" + width); break; case MeasureSpec.EXACTLY: width = MeasureSpec.getSize(widthMeasureSpec); Log.i("EXACTLY========", "onMeasure: width:" + width); break; case MeasureSpec.UNSPECIFIED: width = MeasureSpec.getSize(widthMeasureSpec); Log.i("UNSPECIFIED========", "onMeasure: width:" + width); break; } switch (heightMode){ case MeasureSpec.AT_MOST: height = MeasureSpec.getSize(heightMeasureSpec); Log.i("AT_MOST========", "onMeasure: height:" + height); break; case MeasureSpec.EXACTLY: height = MeasureSpec.getSize(heightMeasureSpec); Log.i("EXACTLY========", "onMeasure: height:" + height); break; case MeasureSpec.UNSPECIFIED: height = MeasureSpec.getSize(heightMeasureSpec); Log.i("UNSPECIFIED========", "onMeasure: height:" + height); break; } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: downX = (int) event.getX(); downY = (int) event.getY(); bm = BitmapFactory.decodeResource(getResources(), R.mipmap.a); //重新绘制图形 invalidate(); break; case MotionEvent.ACTION_MOVE: downX = (int) event.getX(); downY = (int) event.getY(); //重新绘制图形 invalidate(); break; case MotionEvent.ACTION_UP:// bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); downX = (int) event.getX(); downY = (int) event.getY(); //重新绘制图形 invalidate(); //4、在需要回调的位置 使用静态接口变量调用接口中的抽象方法 listener.onClick(); break; } return true; } //3、定义一个全局的 接口类型变量 public OnMyViewClickListener listener; //1、定义个接口 public interface OnMyViewClickListener{ public void onClick(); } //2、定义一个接受接口类型参数的方法 public void setOnMyViewClickListener(OnMyViewClickListener listener){ this.listener = listener; }}
阅读全文
0 0
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- SlidingMenu 侧滑菜单
- AndroidQQ第三方登陆
- java8,你应该了解的新特性(新时间与日期API)
- 清除缓存
- 自定义组合控件
- 自定义控件
- tablayout用法
- Java语言基础学习笔记(四)
- 实现夜间模式
- 初学acmer--c++的泛型库(一)向量
- recyclerview头布局独占一行
- 最简单的解释 webdriver的工作原理
- leetcode 283. Move Zeroes(C语言)
- Xcode代码块转移备份同步(CodeSnippets)代码块路径