博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义view组件
阅读量:5067 次
发布时间:2019-06-12

本文共 1903 字,大约阅读时间需要 6 分钟。

参考《疯狂android讲义》第2版 2.1节P48,对应CustomViewDemo.zip。

若在开发过程中,发现现有的view均不能满足需要,可以自定义一个view。

自定义一个view 的关键在于重写view类的几个核心方法,如onDraw, onTouchEvent等。

自定义view类:

DrawBall.java

package com.ljh.customviewdemo.ui;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class DrawBall extends View {	private Paint p = new Paint();	private float currentX = 40;	private float currentY = 50;	public DrawBall(Context context) {		super(context);	}	public DrawBall(Context context, AttributeSet set) {		super(context, set);	}	@Override	protected void onDraw(Canvas canvas) {		super.onDraw(canvas);		p.setColor(Color.RED);		canvas.drawCircle(currentX, currentY, 15, p);	}	@Override	public boolean onTouchEvent(MotionEvent event) {		currentX = event.getX();		currentY = event.getY();		/*		 * Invalidate the whole view. If the view is visible,		 * onDraw(android.graphics.Canvas) will be called at some point in the		 * future. This must be called from a UI thread. To call from a non-UI		 * thread, call postInvalidate().		 */		invalidate();		return true;	}}
Activity类:MainAtivity.java

package com.ljh.customviewdemo;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);	}	@Override	public boolean onCreateOptionsMenu(Menu menu) {		// Inflate the menu; this adds items to the action bar if it is present.		getMenuInflater().inflate(R.menu.main, menu);		return true;	}}
布局文件:activity_main.xml

注意,activity中包括多个view。一个activity对应一个布局文件,布局文件中包括多个view,这些view可以是android定义好的,或者自定义的。

转载于:https://www.cnblogs.com/eaglegeek/p/4557980.html

你可能感兴趣的文章
win8.1远程连接Redis数据库
查看>>
Codeforces Edu Round 64 A-D
查看>>
【08月14日】A股ROE最高排名
查看>>
【转】路由转发过程的IP及MAC地址变化
查看>>
【Java】登录操作中随机生成验证码的工具类
查看>>
【vue】vue.config.js
查看>>
HDR视频生态圈追踪
查看>>
Linux命令之文件处理
查看>>
费马小定理入门
查看>>
初始化JQuery方法与(function(){})(para)匿名方法介绍
查看>>
动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图...
查看>>
查找、移除某个视图上的某类控件
查看>>
python学习day06--01
查看>>
rest-framework:频率控制
查看>>
MapReduce程序的优化
查看>>
自动化测试框架实践2--STAF
查看>>
MapReduce入门
查看>>
使用 ArcGIS Desktop 切瓦片
查看>>
golang导入包的几个说明:import
查看>>
window bat
查看>>