自定义View(一)
来源:互联网 发布:程序员笔记本电脑 编辑:程序博客网 时间:2024/05/12 10:31
初体验与介绍:
自定义View分三种:
第一种就是继承一个控件,然后在它的基础上继续自定义:
比如TextView,我要加一个特性,在字体上加一个框:(参考Android群英传第三章)
public class XyTextView extends AppCompatTextView { private Paint mPaint; public XyTextView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //初始化画笔,并设置抗锯齿属性 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); //设置画笔颜色 mPaint.setColor(Color.BLUE); //设置画笔风格,画边框线不填充 mPaint.setStyle(Paint.Style.STROKE); //设置画笔画边框线的宽度,单位:px mPaint.setStrokeWidth(2F); } @Override protected void onDraw(Canvas canvas) { //绘制内容之前、 //画个矩形 canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint); //画完保存 canvas.save(); //绘制内容 super.onDraw(canvas); }}
第二种是扩展,就是讲几个控件组合起来成一个常用的新控件:
public class XyLogin extends LinearLayout implements View.OnClickListener { private EditText account; private EditText password; private Button loginBtn; private OnLoginClick loginClick; public void setLoginClick(OnLoginClick loginClick) { this.loginClick = loginClick; } /** * 按钮回调 */ public interface OnLoginClick { void click(View v); } public XyLogin(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //加载布局 LayoutInflater.from(context).inflate(R.layout.view_login, this, true); } /** * 解析布局后执行 */ @Override protected void onFinishInflate() { super.onFinishInflate(); account = findViewById(R.id.account); password = findViewById(R.id.password); loginBtn = findViewById(R.id.loginBtn); loginBtn.setOnClickListener(this); } @Override public void onClick(View v) { loginClick.click(loginBtn); } /** * 设置账号密码文字的设置和获取 */ public void setAccount(String accountStr) { account.setText(accountStr); } public String getAccount() { return account.getText().toString(); } public void setPassword(String passwordStr) { password.setText(passwordStr); } public String getPassword() { return password.getText().toString(); } }
这样组装一个登陆控件(这是最简单的属性设置,想精美一点的可以自己去设置)
但是这种一般很少用,跟鸡肋差不多,只能作为一个知识点来了解。
第三种是最牛逼的,也是大部分人可望不可即的,真正的自定义View,继承View,自己去绘制 。
来个最简单的圆先看看:
public class XyCircle extends View { private Paint mPaint; public XyCircle(Context context) { this(context, null); } public XyCircle(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public XyCircle(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.RED); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(100, 100, 100, mPaint); }}
目前就这三种,或者我孤陋寡闻还存在别的。
android的进阶,这个自定义是绕不过去的,所以干脆别绕,也别想着一直在github上拿,总有砸到脚的时候
阅读全文
0 0
- 自定义View(一)
- 自定义view(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义view(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一)
- 自定义View(一) 初识自定义view
- Android 自定义View(一)
- android-自定义View(一)
- android 自定义view(一)
- 网站截图工具EyeWitness
- IntelliJ Idea 常用快捷键列表
- apicloud极光推送
- codefoces 883H Palindromic Cut
- Django入门小记
- 自定义View(一)
- 【EXP】根据字段导出数据query
- 一次git stash pop引发的血案、、、
- laravel5.2 银联支付
- linux线程同步:互斥量和条件变量的使用
- 微信图片禁止外链 此图片来自微信公众平台未经允许不可引用
- 免费赠送iPhoneX
- oracle实现组内排序,如找出我所有科目中分数最高的两门课
- 时间序列分析记录一