自定义view
来源:互联网 发布:java孤傲苍狼 博客园 编辑:程序博客网 时间:2024/05/31 13:17
主要实现:点击button之后数字和自定义圆的大小一直增加,后期可以拖动。
建一个attrs的xml(内容如下):
<?xml version="1.0" encoding="utf-8"?><resources> <attr name="radio" format="integer"/> <attr name="Mywidth" format="integer"/> <declare-styleable name="CustomView"> <attr name="radio"/> <attr name="Mywidth"/> </declare-styleable></resources>
自定义view的类CustomView:
public class CustomView extends GridView { private int index = 0; private int radio; private int mywidth; public CustomView(Context context) { this(context, null); } public CustomView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); //改变角度和text(就是数字) TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0); int n = a.getIndexCount(); for (int i = 0; i < n; i++) { int attr = a.getIndex(i); switch (attr) { case R.styleable.CustomView_radio: radio = a.getInteger(attr, 0); break; } } a.recycle(); } public CustomView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画笔paint(圆的) Paint paint = new Paint(); paint.setColor(Color.RED); //数字 Paint paint1 = new Paint(); paint1.setColor(Color.GREEN); paint1.setTextSize(50); Paint paint2 = new Paint(); paint2.setColor(Color.YELLOW); //空心的 paint2.setStyle(Paint.Style.STROKE); //圆的宽度 paint2.setStrokeWidth(mywidth); canvas.drawCircle(300f, 300, radio, paint); canvas.drawText(index + "", 230f, 300f, paint1); canvas.drawCircle(300f, 300, 130, paint2); } public void setInteger(int radio) { this.radio = radio; } public void setText(int text) { this.index = text; } private int lastX = 0; private int lastY = 0; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: if (index == 100){ int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = getLeft() + dx; int top = getTop() + dy; int right = getRight() + dx; int bottom = getBottom() + dy; layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); } break; case MotionEvent.ACTION_UP: break; default: break; } return true; }}
activity-main类的代码
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn" android:text="点击" /> <com.bwie.myweektest.CustomView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:id="@+id/cv" app:Mywidth="30" app:radio="10" > </com.bwie.myweektest.CustomView>
Mainactivity类
public class MainActivity extends AppCompatActivity { private CustomView cv; private Button button; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: cv.setInteger(25); cv.invalidate(); break; case 2: cv.setInteger(50); cv.invalidate(); break; case 3: cv.setInteger(75); cv.invalidate(); break; case 4: cv.setInteger(100); cv.invalidate(); break; case 5: cv.setInteger(125); cv.invalidate(); break; case 6: Object obj = msg.obj; cv.setText((Integer) obj); cv.invalidate(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { cv = (CustomView) findViewById(R.id.cv); button = (Button) findViewById(R.id.btn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread() { @Override public void run() { super.run(); for (int i = 1; i < 6; i++) { try { for (int j = (20 * i) - 20; j < (20 * i) + 1; j++) { sleep(50); Message message = new Message(); message.obj = j; message.what = 6; handler.sendMessage(message); } handler.sendEmptyMessage(i); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }); }}
就OK了 ^_^。
阅读全文
0 0
- 自定义view
- 自定义View
- 自定义view
- 自定义View
- 自定义View
- 自定义view
- 自定义View
- 自定义view
- 自定义view
- 自定义View
- 自定义View
- 自定义view
- 自定义view
- 自定义view
- 自定义view
- 自定义view
- 自定义View
- 自定义View
- spring注解
- HIVE严格模式
- 技术博客2
- Struts Spring Mybatis Hibernate J2EE Oracle架构图
- 揭露DOM操作以及性能优化
- 自定义view
- Android搜索功能的实现
- Scrapy URLError>>> ERROR: Caught exception reading instance data
- 特征工程
- 南阳oj 题目127 星际之门(一)
- windows下多python版本下的一个pip错误
- js中几种实用的跨域方法原理详解
- Sftp和ftp over ssh2的区别
- hive的简单增删改查