自定义view之自定义圆环
来源:互联网 发布:淘宝怎么才能投诉快递 编辑:程序博客网 时间:2024/06/02 16:23
首先呢,在res文件之下,你的创建attrs文件,在里面把你需要的属性定义出来
<resources> <declare-styleable name="Zidingyi"> <attr name="outban" format="integer"></attr> <attr name="inban" format="integer"></attr> <attr name="colorhuan" format="color"></attr> <attr name="texts" format="string"></attr> <attr name="textsize" format="integer"></attr> </declare-styleable></resources>然后是布局里面,给你定义的属性赋值
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 重点是这行****** xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <com.bawei.ZidingyiYuan.view.Zidingyi android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" app:outban="100" app:inban="50" app:colorhuan="#fff000" app:texts="圆环" app:textsize="20" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /></RelativeLayout>接下来就是代码了,创建一个类继承view,不多说了,直接看代码public class Zidingyi extends View { private int outban; private int inban; private int textsize; private int colorhuan; private String texts; private int currentX; private int currentY; //声明接口 public OnViewItemClickListener onViewItemClickListener; //定义接口 public interface OnViewItemClickListener{ void onViewItemClick(String texts); } //对外提供一个set方法 public void setOnViewItemClickListener(OnViewItemClickListener onViewItemClickListener){ this.onViewItemClickListener=onViewItemClickListener; } public Zidingyi(Context context) { super(context); } public Zidingyi(Context context, AttributeSet attrs) { super(context, attrs); initview(attrs); } public Zidingyi(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private void initview(AttributeSet attrs) { TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.Zidingyi); inban = typedArray.getInt(R.styleable.Zidingyi_inban, 0); outban = typedArray.getInt(R.styleable.Zidingyi_outban, 0); textsize = typedArray.getInt(R.styleable.Zidingyi_textsize, 0); colorhuan = typedArray.getColor(R.styleable.Zidingyi_colorhuan, 0); texts = typedArray.getString(R.styleable.Zidingyi_texts); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(outban * 2, outban * 2); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); currentX = getMeasuredWidth() / 2; currentY = getMeasuredWidth() / 2; canvas.drawColor(Color.GREEN); Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setAntiAlias(true); paint.setColor(colorhuan); canvas.drawCircle(currentX, currentY, outban, paint); paint.setStyle(Paint.Style.FILL); paint.setAntiAlias(true); paint.setColor(Color.WHITE); canvas.drawCircle(currentX, currentY, inban, paint); paint.setTextSize(textsize); paint.setColor(Color.BLACK); canvas.drawText(texts, currentX - texts.length() / 2 * textsize, currentY + textsize / 2, paint); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: double sqrt = Math.sqrt((currentX - x) * (currentX - x) + (currentY - y) * (currentY - y)); String texts = ""; if (sqrt < inban) { texts = "在小圆内"; } else if (sqrt < outban && sqrt > inban) { texts = "在大圆内"; }else if(sqrt>outban){ texts="在圆环外"; } if(onViewItemClickListener!=null){ onViewItemClickListener.onViewItemClick(texts); } break; } return true; }}最后是mainActivity里面,接口回调,public class MainActivity extends AppCompatActivity { private Zidingyi myview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myview= (Zidingyi) findViewById(R.id.myview); myview.setOnViewItemClickListener(new Zidingyi.OnViewItemClickListener() { @Override public void onViewItemClick(String texts) { Toast.makeText(MainActivity.this,texts,Toast.LENGTH_SHORT).show(); } }); }}
2 0
- 自定义view之自定义圆环
- 自定义View之绘制圆环
- 自定义View之交替圆环
- 自定义View之圆环进度条
- 自定义View之圆环刷新
- Android自定义View之酷炫吊炸天的圆环
- Android 自定义View实例之进度圆环
- 圆环百分比自定义View
- 自定义view-圆环
- 自定义View圆环
- 自定义View圆环进度条
- 自定义view圆环进度条
- 自定义View圆环
- 自定义view圆环
- 自定义view圆环进度条
- 自定义View画圆环(嵌套圆环)
- Android自定义View --- 绘制圆环
- Android--view自定义--圆环等待
- 分布式sparkSQL引擎应用:从远程通过thriftServer连接spark集群处理hive中的数据
- Android 浸染式导航栏的实现
- 逻辑回归理论及实践
- 嵌入式平台QR Code二维码生成qrduino
- socket、tcp、udp、http 的认识及区别
- 自定义view之自定义圆环
- 关于HBulider连接svn资源库显示暂挂中或文件不存在等问题
- Zookeeper编程笔记
- javaWEB_Servlet
- 移动app开发中多种设备尺寸适配问题
- Jmeter参数化(_csvread函数、CSV Data Set Config)
- Android关于低功耗的蓝牙开发工具类
- Hudson中新建任务
- 深入理解volatile