下面列出了android.content.res.TypedArray#getIndexCount() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (attrs != null) {
TypedArray array = getContext().obtainStyledAttributes(attrs,
R.styleable.RoundedImageView);
final int N = array.getIndexCount();
for (int i = 0; i < N; ++i) {
int attr = array.getIndex(i);
if (attr == R.styleable.RoundedImageView_radius) {
radius = array.getFloat(R.styleable.RoundedImageView_radius, 18.f);
}
}
array.recycle();
}
init();
}
/**
* Initialization of attributes.
*/
private void attrsInit(final AttributeSet attrs, final int defStyleAttr, final int defStyleRes) {
if (attrs == null) {
return;
}
final TypedArray typedArray = this.getContext()
.obtainStyledAttributes(attrs, R.styleable.WaypointItem, defStyleAttr, defStyleRes);
final int indexCount = typedArray.getIndexCount();
for (int i = 0; i < indexCount; ++i) {
final int attr = typedArray.getIndex(i);
if (attr == R.styleable.WaypointItem_removingEnabled) {
setRemoveEnabled(typedArray.getBoolean(attr, false));
} else if (attr == R.styleable.WaypointItem_draggingEnabled) {
setDragEnabled(typedArray.getBoolean(attr, false));
} else if (attr == R.styleable.WaypointItem_removingEnabledIcon || attr == R.styleable.WaypointItem_draggingEnabledIcon) {
setIcon(typedArray, attr);
}
}
typedArray.recycle();
}
private void init(AttributeSet attrs, @AttrRes int defStyleAttr) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.TextMarker, defStyleAttr, 0);
for (int i = 0; i < a.getIndexCount(); i++) {
int attr = a.getIndex(i);
if (attr == R.styleable.TextMarker_carbon_text) {
setText(a.getText(attr).toString());
} else if (attr == R.styleable.TextMarker_carbon_textView) {
id = a.getResourceId(attr, 0);
}
}
a.recycle();
}
}
/**
* @param context
* @param attrs
* @param defStyleAttr
*/
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
mNestedScrollingParentHelper = new NestedScrollingParentHelper(this);
mNestedScrollingChildHelper = new NestedScrollingChildHelper(this);
setNestedScrollingEnabled(true);
mScroller = new Scroller(context, new DecelerateInterpolator());
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.AbsRefreshLayout, defStyleAttr, 0);
final int N = a.getIndexCount();
int resFooter = R.layout.layout_loadmore;
for (int i = 0; i < N; i++) {
int attr = a.getIndex(i);
if (attr == R.styleable.AbsRefreshLayout_footerNestLayout) {
resFooter = a.getResourceId(attr, resFooter);
break;
}
}
a.recycle();
/**
* Convert values in dp to values in px;
*/
setFooterView(inflate(context, resFooter, null));
}
/**
* 从TypedArray里面抽取需要的resourceID
*
* @param typedArr
*/
private void initLayer(TypedArray typedArr) {
removeAllViews();
for (int i = 0; i < typedArr.getIndexCount(); i++) {
if (typedArr.getIndex(i) == R.styleable.VDVideoView_layerAttrs) {
int resID = -1;
// 1.layerAttrs中格式一般为@array/sv_videoview_layers之类的格式
// 先读出其resourceID来,准备加载TypedArray
resID = typedArr.getResourceId(
R.styleable.VDVideoView_layerAttrs, -1);
if (resID == -1) {
if (typedArr != null)
typedArr.recycle();
throw new IllegalArgumentException("resID=-1");
}
readLayerAttrs(resID);
} else if (typedArr.getIndex(i) == R.styleable.VDVideoView_canPopupWindow) {
int popWindowType = typedArr.getInt(
R.styleable.VDVideoView_canPopupWindow, -1);
if (popWindowType != -1) {
mIsCanPopupWindow = true;
mPopupWindowType = popWindowType;
}
} else if (typedArr.getIndex(i) == R.styleable.VDVideoView_popWindowWidth) {
float width = typedArr.getDimension(
R.styleable.VDVideoView_popWindowWidth, -1);
if (width != -1) {
mPopupWindowWidth = (int) width;
}
} else if (typedArr.getIndex(i) == R.styleable.VDVideoView_popWindowHeight) {
float height = typedArr.getDimension(
R.styleable.VDVideoView_popWindowHeight, -1);
if (height != -1) {
mPopupWindowHeight = (int) height;
}
}
}
}
private void init(AttributeSet attrs, int defStyle, Context context) {
// Load attributes
final TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.CreditsRollView, defStyle, 0);
if (a != null) {
final int N = a.getIndexCount();
for (int i = 0; i < N; ++i) {
int attr = a.getIndex(i);
if (attr == R.styleable.CreditsRollView_crv_angle) {
float angle = a.getFloat(attr, mAngle);
setAngle(angle);
}
else if (attr == R.styleable.CreditsRollView_crv_scrollPosition) {
float scrollPercent = a.getFloat(attr, 0f);
setScrollPosition(scrollPercent);
}
else if (attr == R.styleable.CreditsRollView_crv_endScrollMultiplier) {
float scrollMult = a.getFloat(attr, 0f);
setEndScrollMult(scrollMult);
}
else if (attr == R.styleable.CreditsRollView_crv_distanceFromText) {
float distance = a.getFloat(attr, 0f);
setDistanceFromText(distance);
}
}
a.recycle();
}
initTextPaint();
}
public VDVideoRelatedButton(Context context, AttributeSet attrs) {
super(context, attrs);
// mContext = context;
// 如果有自定义属性,加载
TypedArray typedArr = context.obtainStyledAttributes(attrs, R.styleable.VDVideoRelatedButton);
if (typedArr != null) {
for (int i = 0; i < typedArr.getIndexCount(); i++) {
int i1 = typedArr.getIndex(i);
if (i1 == R.styleable.VDVideoRelatedButton_listContainer) {
mListContainerID = typedArr.getResourceId(R.styleable.VDVideoRelatedButton_listContainer, -1);
} else if (i1 == R.styleable.VDVideoRelatedButton_uiControl) {
mUIControl = typedArr.getInteger(R.styleable.VDVideoRelatedButton_uiControl, -1);
}
}
typedArr.recycle();
} else {
VDLog.e(TAG, "listContainer属性必须设置");
return;
}
// 如果没有自定义图片,则默认为新浪视频的素材
typedArr = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.background});
if (typedArr != null) {
int resouceID = typedArr.getResourceId(0, -1);
if (resouceID == -1) {
setBackgroundResource(R.drawable.play_ctrl_video_list);
}
typedArr.recycle();
} else {
setBackgroundResource(R.drawable.play_ctrl_video_list);
}
registerListeners();
}
public DSListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.DSListView);
final int count = styledAttrs.getIndexCount();
for (int i = 0; i < count; ++i) {
int attr = styledAttrs.getIndex(i);
if (attr == R.styleable.DSListView_cell_font_size) {
this.cellTextSize = styledAttrs.getDimensionPixelSize(attr, 0);
} else if (attr == R.styleable.DSListView_data_array) {
String[] arr = getResources().getStringArray(styledAttrs.getResourceId(attr, 0));
this.dataFromAttributes = new ArrayList<>(Arrays.asList(arr));
} else if (attr == R.styleable.DSListView_scale_animations) {
this.selectorAnimationsEnabled = styledAttrs.getBoolean(attr, true);
} else if (attr == R.styleable.DSListView_selected_index) {
this.selectedItem = styledAttrs.getInt(attr, 0);
} else if (attr == R.styleable.DSListView_picker_box_view) {
this.pickerBoxResId = styledAttrs.getResourceId(attr, 0);
} else if (attr == R.styleable.DSListView_scale_animations_factor) {
this.scaleFactorDelta = styledAttrs.getFloat(attr, 1.3f) - 1f;
} else if (attr == R.styleable.DSListView_scale_animations_pivot_center) {
this.selectorAnimationCenterPivot = styledAttrs.getBoolean(attr, false);
} else if (attr == R.styleable.DSListView_selector_background) {
try {
this.selectorBgColor = styledAttrs.getColor(attr, Color.parseColor("#116b2b66"));
} catch (Exception e) {
this.selectorBgDrawable = styledAttrs.getResourceId(attr, 0);
}
}
}
styledAttrs.recycle();
initPicker(context);
}
private void initAttr(Context context, AttributeSet attrs) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CalendarView);
for (int i = 0; i < ta.getIndexCount(); i++) {
int attr = ta.getIndex(i);
if (attr == R.styleable.CalendarView_show_last_next) {
mAttrsBean.setShowLastNext(ta.getBoolean(attr, true));
} else if (attr == R.styleable.CalendarView_show_lunar) {
mAttrsBean.setShowLunar(ta.getBoolean(attr, true));
} else if (attr == R.styleable.CalendarView_show_holiday) {
mAttrsBean.setShowHoliday(ta.getBoolean(attr, true));
} else if (attr == R.styleable.CalendarView_show_term) {
mAttrsBean.setShowTerm(ta.getBoolean(attr, true));
} else if (attr == R.styleable.CalendarView_switch_choose) {
mAttrsBean.setSwitchChoose(ta.getBoolean(attr, true));
} else if (attr == R.styleable.CalendarView_solar_color) {
mAttrsBean.setColorSolar(ta.getColor(attr, mAttrsBean.getColorSolar()));
} else if (attr == R.styleable.CalendarView_solar_size) {
mAttrsBean.setSizeSolar(CalendarUtil.getTextSize(context, ta.getInteger(attr, mAttrsBean.getSizeSolar())));
} else if (attr == R.styleable.CalendarView_lunar_color) {
mAttrsBean.setColorLunar(ta.getColor(attr, mAttrsBean.getColorLunar()));
} else if (attr == R.styleable.CalendarView_lunar_size) {
mAttrsBean.setSizeLunar(CalendarUtil.getTextSize(context, ta.getInt(attr, mAttrsBean.getSizeLunar())));
} else if (attr == R.styleable.CalendarView_holiday_color) {
mAttrsBean.setColorHoliday(ta.getColor(attr, mAttrsBean.getColorHoliday()));
} else if (attr == R.styleable.CalendarView_choose_color) {
mAttrsBean.setColorChoose(ta.getColor(attr, mAttrsBean.getColorChoose()));
} else if (attr == R.styleable.CalendarView_day_bg) {
mAttrsBean.setDayBg(ta.getResourceId(attr, mAttrsBean.getDayBg()));
} else if (attr == R.styleable.CalendarView_choose_type) {
mAttrsBean.setChooseType(ta.getInt(attr, 0));
}
}
ta.recycle();
startDate = new int[]{1900, 1};
endDate = new int[]{2049, 12};
mAttrsBean.setStartDate(startDate);
mAttrsBean.setEndDate(endDate);
}
public void initCustomAttrs(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.QRCodeView);
final int count = typedArray.getIndexCount();
for (int i = 0; i < count; i++) {
initCustomAttr(typedArray.getIndex(i), typedArray);
}
typedArray.recycle();
afterInitCustomAttrs();
}
/**
* 获取自定义属性的值
*
* @param context
* @param attrs
* @param defStyleAttr
*/
public ChangeColorIconWithText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ChangeColorIconWithText);
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.ChangeColorIconWithText_icon:
BitmapDrawable drawable = (BitmapDrawable) a.getDrawable(attr);
if (drawable != null) {
mIconBitmap = drawable.getBitmap();
}
break;
case R.styleable.ChangeColorIconWithText_color:
mColor = a.getColor(attr, 0xFF45C01A);
break;
case R.styleable.ChangeColorIconWithText_text:
mText = a.getString(attr);
break;
case R.styleable.ChangeColorIconWithText_text_size:
mTextSize = (int) a.getDimension(attr,
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12,
getResources().getDisplayMetrics()));
break;
}
}
a.recycle();
//初始化成员变量
mTextBound = new Rect();
mTextPaint = new Paint();
mTextPaint.setTextSize(mTextSize);
mTextPaint.setColor(0xff555555);
mTextPaint.getTextBounds(mText, 0, mText.length(), mTextBound);
mTextPaint.setAntiAlias(true); //抗锯齿
}
private void initAttrs(@Nullable AttributeSet attrs) {
if (attrs == null)
return;
float density = getResources().getDisplayMetrics().density;
TypedArray array = getContext().obtainStyledAttributes(attrs,
R.styleable.ExpandableButtonView);
for(int index=0;index<array.getIndexCount();index++) {
int attr=array.getIndex(index);
if(attr==R.styleable.ExpandableButtonView_button_width) {
setButtonWidth(array.getDimensionPixelSize(attr, (int) (56 * density)));
}else if(attr==R.styleable.ExpandableButtonView_button_height) {
setButtonHeight(array.getDimensionPixelSize(attr, (int) (56 * density)));
}else if(attr==R.styleable.ExpandableButtonView_button_color) {
setButtonColor(array.getColor(attr, 0));
}else if(attr==R.styleable.ExpandableButtonView_button_icon) {
setButtonIcon(array.getResourceId(attr, -1));
}else if(attr==R.styleable.ExpandableButtonView_toolbar_color) {
setToolbarColor(array.getColor(attr, -1));
}else if(attr==R.styleable.ExpandableButtonView_duration) {
setDuration(array.getInteger(attr, 150));
}else if(attr==R.styleable.ExpandableButtonView_reverse_duration){
setReverseDuration(array.getInteger(attr,150));
}
}
array.recycle();
}
public CommonPtrLayout(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
final TypedArray a = context.obtainStyledAttributes(attrs, com.lib.ptrview.R.styleable.CommonPtrLayout, defStyleAttr, 0);
try
{
final int N = a.getIndexCount();
for (int i = 0; i < N; i++)
{
int attr = a.getIndex(i);
if (attr == com.lib.ptrview.R.styleable.CommonPtrLayout_ptr_enable_refresh)
setRefreshEnabled(a.getBoolean(attr, true));
else if (attr == com.lib.ptrview.R.styleable.CommonPtrLayout_ptr_enable_loadmore)
setLoadMoreEnabled(a.getBoolean(attr, true));
else if (attr == com.lib.ptrview.R.styleable.CommonPtrLayout_ptr_friction)
setFriction(a.getFloat(attr, DEFAULT_FRICTION));
else if (attr == com.lib.ptrview.R.styleable.CommonPtrLayout_ptr_delay_duration)
mDurationOfDelay = a.getInt(attr, DEFAULT_DURATION_DELAY);
else if (attr == R.styleable.CommonPtrLayout_ptr_bg_refresh)
mRefreshBgResId = a.getResourceId(attr, R.color.black_ptr_view_bg);
else if (attr == R.styleable.CommonPtrLayout_ptr_bg_loadmore)
mLoadMoreBgResId = a.getResourceId(attr, R.color.black_ptr_view_bg);
else if (attr == com.lib.ptrview.R.styleable.CommonPtrLayout_ptr_is_coordinatorLayout)
mIsCoo = a.getBoolean(attr, false);
}
} finally
{
a.recycle();
}
}
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
mScaleTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mMaxVelocity = ViewConfiguration.get(context).getScaledMaximumFlingVelocity();
//初始化滑动帮助类对象
//mScroller = new Scroller(context);
//右滑删除功能的开关,默认开
isSwipeEnable = true;
//IOS、QQ式交互,默认开
isIos = true;
//左滑右滑的开关,默认左滑打开菜单
isLeftSwipe = true;
TypedArray ta = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SwipeMenuView, defStyleAttr, 0);
int count = ta.getIndexCount();
for (int i = 0; i < count; i++) {
int attr = ta.getIndex(i);
//如果引用成AndroidLib 资源都不是常量,无法使用switch case
if (attr == R.styleable.SwipeMenuView_swipeEnable) {
isSwipeEnable = ta.getBoolean(attr, true);
} else if (attr == R.styleable.SwipeMenuView_ios) {
isIos = ta.getBoolean(attr, true);
} else if (attr == R.styleable.SwipeMenuView_leftSwipe) {
isLeftSwipe = ta.getBoolean(attr, true);
}
}
ta.recycle();
}
private void parseAttrs(Context context, AttributeSet attrs) {
//Load from custom attributes
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.FButton);
if (typedArray == null) return;
for (int i = 0; i < typedArray.getIndexCount(); i++) {
int attr = typedArray.getIndex(i);
if (attr == R.styleable.FButton_shadowEnabled) {
isShadowEnabled = typedArray.getBoolean(attr, true); //Default is true
} else if (attr == R.styleable.FButton_buttonColor) {
mButtonColor = typedArray.getColor(attr, getResources().getColor(R.color.fbutton_default_color));
} else if (attr == R.styleable.FButton_shadowColor) {
mShadowColor = typedArray.getColor(attr, getResources().getColor(R.color.fbutton_default_shadow_color));
isShadowColorDefined = true;
} else if (attr == R.styleable.FButton_shadowHeight) {
mShadowHeight = typedArray.getDimensionPixelSize(attr, R.dimen.fbutton_default_shadow_height);
} else if (attr == R.styleable.FButton_cornerRadius) {
mCornerRadius = typedArray.getDimensionPixelSize(attr, R.dimen.fbutton_default_conner_radius);
}
}
typedArray.recycle();
//Get paddingLeft, paddingRight
int[] attrsArray = new int[]{
android.R.attr.paddingLeft, // 0
android.R.attr.paddingRight, // 1
};
TypedArray ta = context.obtainStyledAttributes(attrs, attrsArray);
if (ta == null) return;
mPaddingLeft = ta.getDimensionPixelSize(0, 0);
mPaddingRight = ta.getDimensionPixelSize(1, 0);
ta.recycle();
//Get paddingTop, paddingBottom
int[] attrsArray2 = new int[]{
android.R.attr.paddingTop, // 0
android.R.attr.paddingBottom,// 1
};
TypedArray ta1 = context.obtainStyledAttributes(attrs, attrsArray2);
if (ta1 == null) return;
mPaddingTop = ta1.getDimensionPixelSize(0, 0);
mPaddingBottom = ta1.getDimensionPixelSize(1, 0);
ta1.recycle();
}
public void configureSceneFromAttributes(
@NonNull final SceneConfiguration scene,
@NonNull final Resources r,
@NonNull final AttributeSet attrs) {
final TypedArray a = r.obtainAttributes(attrs, R.styleable.ParticlesView);
try {
final int count = a.getIndexCount();
float particleRadiusMax = Defaults.PARTICLE_RADIUS_MAX;
float particleRadiusMin = Defaults.PARTICLE_RADIUS_MIN;
for (int i = 0; i < count; i++) {
final int attr = a.getIndex(i);
if (attr == R.styleable.ParticlesView_density) {
scene.setDensity(a.getInteger(attr, Defaults.DENSITY));
} else if (attr == R.styleable.ParticlesView_frameDelayMillis) {
scene.setFrameDelay(a.getInteger(attr, Defaults.FRAME_DELAY));
} else if (attr == R.styleable.ParticlesView_lineColor) {
scene.setLineColor(a.getColor(attr, Defaults.LINE_COLOR));
} else if (attr == R.styleable.ParticlesView_lineLength) {
scene.setLineLength(a.getDimension(attr, Defaults.LINE_LENGTH));
} else if (attr == R.styleable.ParticlesView_lineThickness) {
scene.setLineThickness(a.getDimension(attr, Defaults.LINE_THICKNESS));
} else if (attr == R.styleable.ParticlesView_particleColor) {
scene.setParticleColor(a.getColor(attr, Defaults.PARTICLE_COLOR));
} else if (attr == R.styleable.ParticlesView_particleRadiusMax) {
particleRadiusMax = a.getDimension(attr, Defaults.PARTICLE_RADIUS_MAX);
} else if (attr == R.styleable.ParticlesView_particleRadiusMin) {
particleRadiusMin = a.getDimension(attr, Defaults.PARTICLE_RADIUS_MIN);
} else if (attr == R.styleable.ParticlesView_speedFactor) {
scene.setSpeedFactor(a.getFloat(attr, Defaults.SPEED_FACTOR));
}
}
scene.setParticleRadiusRange(particleRadiusMin, particleRadiusMax);
} finally {
a.recycle();
}
}
/**
* Obtains all attributes, which are defined by an {@link android.widget.Spinner} widget, from a
* specific typed array.
*
* @param typedArray
* The typed array, the attributes should be obtained from, as an instance of the class
* {@link TypedArray}. The typed array may not be null
*/
private void obtainSpinnerStyledAttributes(@NonNull final TypedArray typedArray) {
for (int i = 0; i < typedArray.getIndexCount(); i++) {
int index = typedArray.getIndex(i);
if (index == R.styleable.Spinner_android_dropDownHorizontalOffset) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
setDropDownHorizontalOffset(
typedArray.getDimensionPixelSize(index, getDropDownHorizontalOffset()));
}
} else if (index == R.styleable.Spinner_android_dropDownVerticalOffset) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
setDropDownVerticalOffset(
typedArray.getDimensionPixelSize(index, getDropDownVerticalOffset()));
}
} else if (index == R.styleable.Spinner_dropDownWidth) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
setDropDownWidth(typedArray.getLayoutDimension(index, getDropDownWidth()));
}
} else if (index == R.styleable.Spinner_popupBackground) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
Drawable popupBackground = typedArray.getDrawable(index);
if (popupBackground != null) {
setPopupBackgroundDrawable(popupBackground);
}
}
} else if (index == R.styleable.Spinner_prompt) {
String prompt = typedArray.getString(index);
if (prompt != null) {
setPrompt(prompt);
}
} else if (index == R.styleable.Spinner_android_entries) {
CharSequence[] entries = typedArray.getTextArray(index);
if (entries != null) {
ArrayAdapter<CharSequence> adapter =
new ArrayAdapter<>(getContext(), R.layout.spinner_item, entries);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
setAdapter(adapter);
}
}
}
}
public PullButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.pull_button, this);
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
display.getSize(displaySize);
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PullButton);
final int N = a.getIndexCount();
icon = (ImageButton) findViewById(R.id.icon);
textView = (TextView) findViewById(R.id.textView);
easeTextView = (TextView) findViewById(R.id.ease_text);
for (int i = 0; i < N; ++i) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.PullButton_icon:
imageResId = a.getResourceId(attr, R.drawable.close_button);
break;
case R.styleable.PullButton_text:
String text = a.getString(attr);
textView.setText(text);
break;
case R.styleable.PullButton_upsideDown:
upsideDown = a.getBoolean(attr, false);
break;
case R.styleable.PullButton_ease_text:
easeTextView.setText(a.getString(attr));
break;
}
}
a.recycle();
ViewTreeObserver vto = getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (upsideDown) {
textView.setY(0);
icon.setY(textView.getHeight());
icon.setRotation(180);
easeTextView.setY(easeTextView.getY() + textView.getHeight());
}
if (upsideDown) {
homePosition = 0 - textView.getHeight();
extendedPosition = 0;
exitY = displaySize.y + 10;
} else {
homePosition = displaySize.y - icon.getHeight();
extendedPosition = displaySize.y - getHeight();
exitY = -getHeight() - 10;
}
setY(homePosition);
ViewTreeObserver obs = getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
}
});
if (imageResId != -1) {
icon.setImageResource(imageResId);
}
minMovementDistance = displaySize.y / 2;
setAlpha(homeAlpha);
this.animate().setInterpolator(new LinearInterpolator());
this.setOnTouchListener(new SwipeTouchListener());
}
/**
* Perform inflation from XML and apply a class-specific base style. This
* constructor of Preference allows subclasses to use their own base style
* when they are inflating. For example, a {@link CheckBoxPreference}
* constructor calls this version of the super class constructor and
* supplies {@code android.R.attr.checkBoxPreferenceStyle} for
* <var>defStyleAttr</var>. This allows the theme's checkbox preference
* style to modify all of the base preference attributes as well as the
* {@link CheckBoxPreference} class's attributes.
*
* @param context The Context this is associated with, through which it can
* access the current theme, resources,
* {@link SharedPreferences}, etc.
* @param attrs The attributes of the XML tag that is inflating the
* preference.
* @param defStyleAttr An attribute in the current theme that contains a
* reference to a style resource that supplies default values for
* the view. Can be 0 to not look for defaults.
* @param defStyleRes A resource identifier of a style resource that
* supplies default values for the view, used only if
* defStyleAttr is 0 or can not be found in the theme. Can be 0
* to not look for defaults.
* @see #Preference(Context, AttributeSet)
*/
public Preference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
mContext = context;
final TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.Preference, defStyleAttr, defStyleRes);
for (int i = a.getIndexCount() - 1; i >= 0; i--) {
int attr = a.getIndex(i);
if (attr == R.styleable.Preference_android_icon) {
mIconResId = a.getResourceId(attr, 0);
} else if (attr == R.styleable.Preference_android_key) {
mKey = a.getString(attr);
} else if (attr == R.styleable.Preference_android_title) {
mTitleRes = a.getResourceId(attr, 0);
mTitle = a.getString(attr);
} else if (attr == R.styleable.Preference_android_summary) {
mSummary = a.getString(attr);
} else if (attr == R.styleable.Preference_android_order) {
mOrder = a.getInt(attr, mOrder);
} else if (attr == R.styleable.Preference_android_fragment) {
mFragment = a.getString(attr);
} else if (attr == R.styleable.Preference_android_layout) {
mLayoutResId = a.getResourceId(attr, mLayoutResId);
} else if (attr == R.styleable.Preference_android_widgetLayout) {
mWidgetLayoutResId = a.getResourceId(attr, mWidgetLayoutResId);
} else if (attr == R.styleable.Preference_android_enabled) {
mEnabled = a.getBoolean(attr, true);
} else if (attr == R.styleable.Preference_android_selectable) {
mSelectable = a.getBoolean(attr, true);
} else if (attr == R.styleable.Preference_android_persistent) {
mPersistent = a.getBoolean(attr, mPersistent);
} else if (attr == R.styleable.Preference_android_dependency) {
mDependencyKey = a.getString(attr);
} else if (attr == R.styleable.Preference_android_defaultValue) {
mDefaultValue = onGetDefaultValue(a, attr);
} else if (attr == R.styleable.Preference_android_shouldDisableView) {
mShouldDisableView = a.getBoolean(attr, mShouldDisableView);
}
}
a.recycle();
}
/**
* 初始化属性
*
* @param context
* @param attrs
* @param defStyle
*/
public ArcMenu(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
// dp fillData to px
mRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
mRadius, getResources().getDisplayMetrics());
TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.ArcMenu, defStyle, 0);
int n = a.getIndexCount();
for (int i = 0; i < n; i++)
{
int attr = a.getIndex(i);
switch (attr)
{
case R.styleable.ArcMenu_position:
int val = a.getInt(attr, 0);
switch (val)
{
case 0:
mPosition = Position.LEFT_TOP;
break;
case 1:
mPosition = Position.RIGHT_TOP;
break;
case 2:
mPosition = Position.RIGHT_BOTTOM;
break;
case 3:
mPosition = Position.LEFT_BOTTOM;
break;
}
break;
case R.styleable.ArcMenu_radius:
// dp fillData to px
mRadius = a.getDimensionPixelSize(attr, (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100f,
getResources().getDisplayMetrics()));
break;
}
}
a.recycle();
}