android怎么追代码,追踪源码抄袭android的xml转drawable代码实现recyclerview分割线-用代码是些shape selector 等等方案都在这里啦。...

追踪源码找到了这句话,所以也可以理解为什么网上要那样写了.这其实官方就是这样写的。

那么我接下来就要手写一个recyclerview的shape分割线

public static Drawable createFromXmlInner(Resources r, XmlPullParser parser, AttributeSet attrs,

Theme theme) throws XmlPullParserException, IOException {

final Drawable drawable;

final String name = parser.getName();

switch (name) {

case "selector":

drawable = new StateListDrawable();

break;

case "animated-selector":

drawable = new AnimatedStateListDrawable();

break;

case "level-list":

drawable = new LevelListDrawable();

break;

case "layer-list":

drawable = new LayerDrawable();

break;

case "transition":

drawable = new TransitionDrawable();

break;

case "ripple":

drawable = new RippleDrawable();

break;

case "color":

drawable = new ColorDrawable();

break;

case "shape":

drawable = new GradientDrawable();

break;

case "vector":

drawable = new VectorDrawable();

break;

case "animated-vector":

drawable = new AnimatedVectorDrawable();

break;

case "scale":

drawable = new ScaleDrawable();

break;

case "clip":

drawable = new ClipDrawable();

break;

case "rotate":

drawable = new RotateDrawable();

break;

case "animated-rotate":

drawable = new AnimatedRotateDrawable();

break;

case "animation-list":

drawable = new AnimationDrawable();

break;

case "inset":

drawable = new InsetDrawable();

break;

case "bitmap":

drawable = new BitmapDrawable(r);

if (r != null) {

((BitmapDrawable) drawable).setTargetDensity(r.getDisplayMetrics());

}

break;

case "nine-patch":

drawable = new NinePatchDrawable();

if (r != null) {

((NinePatchDrawable) drawable).setTargetDensity(r.getDisplayMetrics());

}

break;

default:

throw new XmlPullParserException(parser.getPositionDescription() +

": invalid drawable tag " + name);

}

drawable.inflate(r, parser, attrs, theme);

return drawable;

}

实现shape

*/

//在这里我们传入作为Divider的Drawable对象

mDrawable = new GradientDrawable();

RectShape rectShape = new RectShape();

mDrawable.setGradientType(GradientDrawable.RECTANGLE);

int size = DensityUtil.dip2px(context, 0.5f);

mDrawable.setSize(size,size);

mDrawable.setColor(Color.parseColor(colorHex));

实现selector

public static StateListDrawable genereateSelectorDrawable(Context context, int idNormal, int idPressed, int idFocused, int idUnable) {

StateListDrawable bg = new StateListDrawable();

Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);

Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);

Drawable focused = idFocused == -1 ? null : context.getResources().getDrawable(idFocused);

Drawable unable = idUnable == -1 ? null : context.getResources().getDrawable(idUnable);

// View.PRESSED_ENABLED_STATE_SET

bg.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);

// View.ENABLED_FOCUSED_STATE_SET

bg.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focused);

// View.ENABLED_STATE_SET

bg.addState(new int[]{android.R.attr.state_enabled}, normal);

// View.FOCUSED_STATE_SET

bg.addState(new int[]{android.R.attr.state_focused}, focused);

// View.WINDOW_FOCUSED_STATE_SET

bg.addState(new int[]{android.R.attr.state_window_focused}, unable);

// View.EMPTY_STATE_SET

bg.addState(new int[]{}, normal);

return bg;

}

接下来如何创建可以自行百度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值