//得到xml里标签的属性 final AttributeSet attrs = Xml.asAttributeSet(parser); View result = root;...android.app. //如果3个前缀都找不到类,才交给父类使用前缀android.view....比如,把xml二进制文件进行各种分区,如文件头、标签区、属性区、字符串常量池区,然后解析时则用如readShort、readLong之类的方式进行指针移位,从而读出相应的view标签、view属性,有点类似...java类,不像DataBinding需要包上一层layout标签。...核心流程就是,先通过merge.xml来收集xml中用到的view集合,然后Apt生成一个类来处理集合,然后干预默认工厂Factory来插入自己的view创建逻辑。 ?
//得到xml里标签的属性 final AttributeSet attrs = Xml.asAttributeSet(parser); View result = root;...android.app. //如果3个前缀都找不到类,才交给父类使用前缀android.view....比如,把xml二进制文件进行各种分区,如文件头、标签区、属性区、字符串常量池区,然后解析时则用如readShort、readLong之类的方式进行指针移位,从而读出相应的view标签、view属性,有点类似...java类,不像DataBinding需要包上一层layout标签。...核心流程就是,先通过merge.xml来收集xml中用到的view集合,然后Apt生成一个类来处理集合,然后干预默认工厂Factory来插入自己的view创建逻辑。
原先可以运行的程序,换新机调试后奔溃:找不到 drawable 下的 XML 文件 报错如下: android.content.res.Resources$NotFoundException: Resource...ID #0x7f070083 排查出原因是 XML 文件放在了 drawable-v24 下面,如下: 原因部分机子操作系统版本过低,没有访问 drawable-v24 的权限,解决方法:将 XML
import android.app.Activity; import android.content.Context; import android.graphics.*; import ...android.os.Bundle; import android.view.*; public class Mian extends Activity { /** Called when...SurfaceView implements SurfaceHolder.Callback,Runnable { SurfaceHolder holder; Rect rect;//创建类... canvas.drawCircle(100, rect.y, 50, p);//画圆 } } class Rect implements Runnable{//矩形类
选取自定义View的方法 我们都知道自定义View有多种方式,比如继承自View、ViewGroup或者继承自现有的View子类等,每种实现方式的不同我们所需要做的处理工作也不同,从图中可以看出包含两个...2.实现过程 2.1 新建一个类 新建DiscountView类,继承自LinearLayout,重写三个构造方法,并在构造方法中做一些初始化操作 ?...绘制打折标签 接下来的标签就是绘制标签,在这里有两个注意的问题: (1) 绘制的方式有很多,可以绘制矩形后旋转画布或者直接用Path绘制,这里我们采用使用Path绘制 (2) 既然要绘制东西,那么就要重新...onDraw方法,那么继承自Viewgroup的方式默认是不执行onDraw方法的所以记得要设置 setWillNotDraw(false); 2.5 初始化画笔等信息 我们绘制的打折标签为红色 paintDiscount...= new Paint(); paintDiscount.setColor(Color.RED); paintDiscount.setStyle(Paint.Style.FILL); 标签的打折文字是白色
View,是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。...在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。...在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。 ...注意,invalidate 不能直接在线程中调用, 就是不可以在子线程中调用,因此它违背了 Android的单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI 线程中执行,因此...Android中最常用的方法就是利用Handler来实现UI线程的更新。
View和Activity的区别 android的四大组件,Activity是四大组件中唯一一个用来和用户进行交互的组件。可以说Activity就是android的视图层。...View有哪些? Android中控件大致被分为两类ViewGroup,View。ViewGroup作为容器管理View。Android视图,是类似于Dom树的架构。父视图负责测量定位绘制等操作。...现在在用的很多控件都是直接或者间接继承自View的,如下图。 ? ViewGroup是什么? 一个ViewGroup是一个可以包含子View的容器,是布局文件和View容器的基类。...在这个类里定义了ViewGroup.LayoutParams类,这个类是布局参数的子类。 其实ViewGroup也就是View的容器。...这种从根到叶的组合方式,我们可以看做成一个View树。(类似于XML),而View的显示和事件处理,都是依赖于这个View树。 绘制和事件处理的起始点,都是从根View开始一级一级的往下传递。
暂停,恢复,停止,销毁等) activity task管理(前台->后台,后台->前台,最近task查询,运行时task查询) 激活/去激活service 激活/去激活provider等 常用内部静态类有...runningTaskInfos) { cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString(); } 4.判断android...contains(packageName)) { return true; } return false; } 5.获取android
View的基本知识 (1.1) 自定义View的一般步骤 一般来说,自定义View往往有以下两个步骤: 1.创建一个继承自View或者某个具体View的类,在其中完成自定义View的主要功能; 2....(1.2) 自定义View的构造方法 在自定义View类中一般会声明三个构造方法,构造方法的写法依据个人喜好往往有下面两种风格?...; 第二个参数attrs 就是我们自定义View声明的一些属性,一般传入的是 R.styleable.xxx,内容写在 attrs.xml 文件中,标签为declare-styleable,例如V1.0...,例如对编辑模式更友好些,避免只显示一个类名在Preview视图中,还有对于View在异常情况下进行数据保存和恢复的工作等等,以后有空了再深入研究下。...dive into Android View constructors
我们在自定义View的时候通常需要先完成attrs.xml文件 在values中定义一个attrs.xml 然后添加相关属性 这一篇先详细介绍一下attrs.xml的属性。 xml version="1.0" encoding="utf-8"?...= "http://schemas.android.com/apk/res/android" android:interpolator = "@anim/动画ID"...android:pivotX = "200%" android:pivotY = "300%" android:duration...= "http://schemas.android.com/apk/res/android" android:orientation = "vertical
imageView.setAnimation(alphaAnimation); alphaAnimation.start(); 各种动画的Java代码 这种动画一般分成四类,那么我们就创建一个项目好好玩玩...整篇代码 activity_main.xml xml version="1.0" encoding="utf-8"?...android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation...; import android.view.animation.AnimationSet; import android.view.animation.BounceInterpolator; import...android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation
//mOldWidthMeasureSpec和mOldHeightMeasureSpec分别表示上次对View进行量算时的widthMeasureSpec和heightMeasureSpec...//执行View的measure方法时,View总是先检查一下是不是真的有必要费很大力气去做真正的量算工作 final boolean specChanged = widthMeasureSpec...真正进行量算之前,View还想进一步确认能不能从已有的缓存mMeasureCache中读取缓存过的量算结果 //如果是强制layout导致的量算,那么将cacheIndex设置为...~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT; } else { //onMeasure执行完后,通过位操作,重置View...setMeasuredDimension()方法, //那么此处就会抛出异常,提醒开发者在onMeasure方法中调用setMeasuredDimension()方法 //Android
Handler 有关的部分源码 // android.os Handler 有关的部分源码 public final boolean post(@NonNull Runnable r)...AttachInfo AttachInfo是View的静态内部类。View关联到父window后,用这个类来存储一些信息。...AttachInfo存储的一部分信息如下: WindowId mWindowId window的标志 View mRootView 最顶部的view Handler mHandler 这个handler...如果View当前还没有AttachInfo,则把任务添加到了View自己的HandlerActionQueue队列中,然后在dispatchAttachedToWindow中把任务交给传入的AttachInfo...也可以这样认为,View.post用的就是handler.post。 我们在获取View的宽高时,会利用View的post方法,就是等View真的关联到window再拿宽高信息。 流程图归纳如下
Android系统的视图结构的设计也采用了组合模式,即View作为所有图形的基类,Viewgroup对View继承扩展为视图容器类,由此就得到了视图部分的基本结构--树形结构 View定义了绘图的基本操作...在view中定义为final类型,要求子类不能修改。...而对于ViewGroup则不需要实现该函数,因为作为容器是“没有内容“的,其包含了多个子view,而子View已经实现了自己的绘制方法,因此只需要告诉子view绘制自己就可以了,也就是下面的dispatchDraw...在view中这是个空函数,具体的视图不需要实现该方法,它是专门为容器类准备的,也就是容器类必须实现该方法; (5)如果需要(应用程序调用了setVerticalFadingEdge或者setHorizontalFadingEdge...ViewGroup中的扩展操作: 首先Viewgroup是一个抽象类。
public void setTitle(String paramString) { this .title = paramString; } } 这个类封装了标签视图的背景图片资源...对应的xml文件例如以下,tag.xml: xml version= "1.0" encoding = "utf-8"?...android-flowlayout功能实现的类是FlowLayout,所以通过继承这个类来完毕标签控件的实现。...; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import...android.view.View.OnClickListener; import android.widget.CompoundButton; /** * @author kince * */ public
match_parent:符合父容器的尺寸 wrap_content:包裹内容
XML对应的类就是ColorStateList(里面介绍的第一个就是)。...而第二个XML,我一开始找了很久都没找到,直到我点开文档最下方的State List Drawable,发现赫然写着: StateListDrawable(原谅我激动的心情) 点进这个类看到对应的...所谓转换,其实就是构造一个对应类的对象,然后把XML的属性对应的内容用Java代码的方式“填充”进这个对象中便完成了。在使用到这个XML的地方,也用对应的设置方法把该成员设置进去就可以了。...是在Android ROM编译的时候生成的一个类,就类似我们写应用时自动生成的R.java,里面全部是声明的值。...注意: 虽然ColorStateList对应的selector XML放在drawable文件夹里面,但他本身是一个自定义类!父类是Object!
这里我们用面向对象的父类来理解, 就是子style会继承父类的属性. 同样的, 父类的属性要比子类属性优先级要低. (你都把我写出来了, 居然和我说我没用, 要被老爸的style覆盖掉?!)...style不属于android Namespace中的属性 (不以android:开头), 没有对应的setStyle方法可以使用, 我的理解是它属于xml预加载的一种”机制”....对于一个style, 将其替换成style中的attribute集合, 并向上 (父类) 继续增加父类集合, 并注意优先级 (子类可以覆盖父类attribute)...., 是用android:attr索引的. android:attr其实是在theme中定义的属性, apk的theme在AndroidManifest.xml中定义....在解析xml过程中, 遇到android:attr的时候, 他就会在apk指定的theme中找到相应的item.
最近在公司做一个项目,需要把Android界面打包进jar包给客户使用。对绝大部分开发者来说,Android界面的布局以XML文件为主,并辅以少量Java代码进行动态调整。...参考链接:http://blog.csdn.net/lg707415323/article/details/7709076 2.LayoutInflater 方案 实现方法:通过LayoutInflater类解析外部...分析:Android解释因为性能原因,LayoutInflater只支持解析已经预编译在apk包里的xml。所以没办法解析外部导入的xml布局资源。...结论:不可行 参考链接: http://gamebs.blog.163.com/blog/static/1860182182012827545621/ 3.Android XML 转 Java Code...这种方案过于累赘,只能选择Android XML翻译原生代码的方法。于是就有了AndroidXMLToJava管理工具的诞生。 接下来几篇会分享该转换工具的一些解决过程。
Android XML绘图 XMl在Android中可不仅仅是一个布局文件、配置列表。它甚至可以变成一张画、一张图。..." android:dashGap="4dp" android:dashWidth="4dp" /> shape> 接着在要使用的view里引用就可以了,例如本例中用做...; 线左右两边会留有空白间距,线越粗,空白越大; 引用虚线的view需要添加属性android:layerType,值设为”software”,否则显示不了虚线。...:drawable,在color目录下可用的属性为android:color; item的子节点可以为任何类型的drawable类标签,除了上面例子中的shape、color、layer-list,也可以是...selector标签,可以添加一个或多个item子标签,而相应的状态是在item标签中定义的。 定义的xml文件可以作为两种资源使用:drawable和color。
领取专属 10元无门槛券
手把手带您无忧上云