自定义view

干货分享:小程序项目实践和经验总结

元气小坏坏 提交于 2019-11-26 12:14:06
最近接触小程序开发,我特将本次开发过程中所使用到的相关知识点进行了总结,以作为经验的积累。希望给自己以后的开发,提供一些帮忙,同时提高解决问题的能力。如有错误,请大家指正。 github地址 ; 项目地址 ; weui:使用微信原生视觉体验样式库 认识: WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。 官网: https://weui.io/ github地址: https://github.com/weui/weui-wxss 微信推出了一套官方样式库,方便大家开发,对于一些类似的UI界面我们需要引入即可,无需重复造轮子。我们只需导入weui.wxss等即可减少大量的css布局工作. 关于本地图片资源路径(background) 小程序只有image标签支持本地图片资源路径,wxss里的background-image不支持。 如果想在css中使用背景图,解决方法: 1、将本地图片用线上地址转化成base64路径。线上转化base64的地址: http://imgbase64.duoshitong.com/ 2、url里面的图片来源必须填写外链。如下: area{ background: url('https://mirror-gold-cdn.xitu.io

Android自定义View的实现(四)

隐身守侯 提交于 2019-11-26 11:19:17
如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。 一、自绘控件 自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的。绘制的代码是写在onDraw()方法中的,而这部分内容我们已经在 Android视图绘制流程完全解析,带你一步步深入了解View(二) 中学习过了。 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次。新建一个CounterView继承自View,代码如下所示: public class CounterView extends View implements OnClickListener { private Paint mPaint; private Rect mBounds; private int mCount; public CounterView(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBounds = new Rect(); setOnClickListener(this); }

Android面试题(二)Android基础3

邮差的信 提交于 2019-11-26 09:14:53
(三)常见的一些原理性问题 1、Handler机制和底层实现 上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍: ActivityThread:程序的启动入口,该类就是我们说的主线程,它对Looper进行操作的。 Handler:字面意思是操控者,该类有比较重要的地方,就是通过handler来发送消息(sendMessage)到MessageQueue和 操作控件的更新(handleMessage)。handler下面持有这MessageQueue和Looper的对象。 MessageQueue:字面意思是消息队列,就是封装Message类。对Message进行插入和取出操作。 Message:这个类是封装消息体并被发送到MessageQueue中的,给类是通过链表实现的,其好处方便MessageQueue的插入和取出操作。还有一些字段是(int what,Object obj,int arg1,int arg2)。what是用户定义的消息和代码,以便接收者(handler)知道这个是关于什么的。obj是用来传输任意对象的,arg1和arg2是用来传递一些简单的整数类型的。 下面,我们按照启动顺序来进行源码分析: 先获取looper,如果没有就创建 创建过程:

实现Activity侧滑返回效果

牧云@^-^@ 提交于 2019-11-26 01:11:26
先看一张效果图 通过ViewDragHelper来检测到屏幕侧滑,然后通过内置接口传递给Acitivity触发了侧滑事件,通知其关闭。 1、实现侧滑删除,这里的方法是先要创建一个监听侧滑的自定义布局. public class SwipeBackLayout extends FrameLayout { private ViewDragHelper mViewDragHelper; private View mContentView; private int mContentWidth; private boolean isClose; private int mMoveLeft; private callBackListener mCallBackListener; public SwipeBackLayout (Context context) { this (context, null ); } public SwipeBackLayout (Context context, AttributeSet attrs) { this (context, attrs, 0 ); } public SwipeBackLayout (Context context, AttributeSet attrs, int defStyleAttr) { super (context, attrs

MVVM 架构与数据绑定库

血红的双手。 提交于 2019-11-26 00:10:36
Model-View-Presenter(MVP),即模型-视图-表示层,架构被广泛应用于 Android 应用程序,通过引入表示层将视图与表示逻辑和模型分离。Model-View-ViewModel(MVVM),即模型-视图-视图模型,与 MVP 非常相似,视图模型充当增强的表示层,使用数据绑定器保持视图模型和视图同步。通过将视图绑定到视图模型属性上,数据绑定程序可以处理视图更新而无需手动更改数据来设置视图(例如,不用再设置控件 TextView 的setTest() 或者 setVisibility() 属性)。与 MVP 中的表示层一样,视图模型可以很容易地进行单元测试。本文介绍了数据绑定库和 MVVM 架构模式,以及它们在 Android 上协同工作方式。 数据绑定 什么是数据绑定? 数据绑定是一种把数据绑定到用户界面元素(控件)的通用机制。通常,数据绑定会将数据从本地存储或者网络绑定到显示层,其特征是数据的改变会自动在数据源和用户界面之间同步。 数据绑定库的好处 TextView textView = (TextView) findViewById(R.id.label); EditText editText = (EditText) findViewById(R.id.userinput); ProgressBar progressBar = (ProgressBar)

自定义View-文字绘制

拈花ヽ惹草 提交于 2019-11-25 19:52:24
前言 文字绘制其实内容太细,而且可能不常用,确实我工作这么久,没用到过几次,这里就快速总结一下API,做下笔记吧。 绘制文字的方式: // 最基本的方法drawText(), 注意很重要的一点,x,y的坐标是指文字左下角的坐标 canvas.drawText(text, x, y, paint); // 对中国人没用,某些国家的文字形状会相互影响,单写是一个样儿, 和别的字连在一起又一个样 canvas.drawTextRun(); // 沿着一条Path来绘制文字, 拐弯处记得用圆角 canvas.drawTextOnPath(text, path, x, y, paint); // 绘制多行文字,对文字的排列和样式没有太复杂的要求,使用StaticLayout StaticLayout Paint对文字绘制的辅助 // 设置文字大小 setTextSize(float size); // 设置字体 setTypeface(Typeface typeface); // 是否使用伪粗体 setFakeBoldText(boolean fakeBoldText); // 是否使用删除线 setStrikeThruText(boolean strikeThruText); // 是否加下划线 setUnderlineText(boolean underlineText); //