@Override public void draw(@NonNull final Canvas canvas) { super.draw(canvas); // Only recalculate the close bounds if they are dirty if (mCloseBoundChanged) { mCloseBoundChanged = false; mClosableLayoutRect.set(0, 0, getWidth(), getHeight()); // Create the bounds for our close regions. applyCloseRegionBounds(mClosePosition, mClosableLayoutRect, mCloseRegionBounds); // The inset rect applies padding around the visible closeButton. mInsetCloseRegionBounds.set(mCloseRegionBounds); mInsetCloseRegionBounds.inset(mCloseButtonPadding, mCloseButtonPadding); // The close button sits inside the close region with padding and gravity // in the same way the close region sits inside the whole ClosableLayout applyCloseButtonBounds(mClosePosition, mInsetCloseRegionBounds, mCloseButtonBounds); mCloseDrawable.setBounds(mCloseButtonBounds); } // Draw last so that this gets drawn as the top layer. This is also why we override // draw instead of onDraw. if (mCloseDrawable.isVisible()) { mCloseDrawable.draw(canvas); } }
public Drawable createIconDrawable(Drawable src) { Bitmap scaled = createIconBitmap(src); StateListDrawable result = new StateListDrawable(); result.addState( new int[] {android.R.attr.state_focused}, new BitmapDrawable(createSelectedBitmap(scaled, false))); result.addState( new int[] {android.R.attr.state_pressed}, new BitmapDrawable(createSelectedBitmap(scaled, true))); result.addState(new int[0], new BitmapDrawable(scaled)); result.setBounds(0, 0, mIconTextureWidth, mIconTextureHeight); return result; }
private void initTabs(int currentTab) { for (int index = 0; index < mTabCount; index++) { TextView tvTab = new TextView(mContext); tvTab.setId(BASE_ID + index); tvTab.setOnClickListener(this); tvTab.setGravity(Gravity.CENTER); if (null != mViewPager.getAdapter().getPageTitle(index)) { tvTab.setTextColor(mTextColor); tvTab.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSizeNormal); tvTab.setText(mViewPager.getAdapter().getPageTitle(index)); } if (mTabIcons != null && mTabIcons.size() > index) { StateListDrawable drawable = mTabIcons.get(index); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); tvTab.setCompoundDrawables(null, drawable, null, null); tvTab.setCompoundDrawablePadding(0); tvTab.setPadding(0, 10, 0, 0); } LayoutParams tabLp = new LayoutParams(0, LayoutParams.MATCH_PARENT, 1); tabLp.gravity = Gravity.CENTER; tvTab.setLayoutParams(tabLp); tvTab.setPadding(0, mTabPaddingTop, 0, mTabPaddingBottom); this.addView(tvTab); if (index == 0) { resetTab(tvTab, true); } if (index != mTabCount - 1 && mHasDivider) { LayoutParams dividerLp = new LayoutParams(mDividerWidth, LayoutParams.MATCH_PARENT); dividerLp.setMargins(0, mDividerVerticalMargin, 0, mDividerVerticalMargin); View vLine = new View(getContext()); vLine.setBackgroundColor(mDividerColor); vLine.setLayoutParams(dividerLp); this.addView(vLine); } } setCurrentTab(currentTab); }
@Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); onBoundsChange(getBounds()); }