Utekelezaji wa haraka na mchafu. Kubwa! Lakini ninawezaje kuongeza hii kwenye programu yangu

Mwaka huu Mawasilisho ya Google I/O iliwasilishwa mpya Toleo la Android - L. Pamoja na hili, mambo mengi mapya yalianzishwa kwa watumiaji na watengenezaji. Lakini moja ya uvumbuzi kuu, bila shaka, ilikuwa mpya Ufumbuzi wa Google kuunganisha muundo - Usanifu wa Nyenzo.

Moja ya muundo wa muundo wa nyenzo ni Kitufe cha Kitendo kinachoelea.

Kitufe cha Kitendo cha Kuelea ni nini?

Google inasema ni "njia iliyolengwa ya kuendesha gari." Kitufe chenyewe kina sura ya duara inayoelea juu ya kiolesura.


Inastahili kuzingatia kwamba Kitufe cha Kitendo kinachoelea kinapaswa kuonyesha tu kitendo kikuu katika programu.

Utekelezaji wa haraka na chafu

Nilitaka kuunda njia ya haraka kuongeza FAB rahisi kwako Programu za Android na minSdkVersion = 14 (Ice Sandwichi ya Cream) Pia nilitekeleza uhuishaji unaofifia/kutoweka na chaguo za kubinafsisha vitufe vidogo.

Nambari zote zinapatikana katika Github Gist (ongeza darasa hili kwenye mradi wako).

Kwa kuegemea, nitarudia nambari hapa

kifurushi chako_kifurushi; agiza android.animation.AnimatorSet; agiza android.animation.ObjectAnimator; agiza android.app.Shughuli; agiza android.content.Context; agiza android.graphics.Bitmap; agiza android.graphics.Canvas; agiza android.graphics.Color; agiza android.graphics.Paint; agiza android.graphics.drawable.BitmapDrawable; agiza android.graphics.drawable.Drawable; agiza android.view.Gravity; agiza android.view.MotionEvent; agiza android.view.View; agiza android.view.ViewGroup; agiza android.view.animation.AccelerateInterpolator; agiza android.view.animation.OvershootInterpolator; agiza android.widget.FrameLayout; darasa la umma FloatingActionButton inapanua Mwonekano ( Muktadha wa muktadha; Rangi mButtonPaint; Rangi mDrawablePaint; Bitmap mBitmap; boolean mHidden = uongo; public FloatingActionButton(Muktadha wa muktadha) ( super(context); this.context = context; init(Color.WHITE); ) setFloatingActionButtonColor utupu wa umma(int FloatingActionButtonColor) ( init(FloatingActionButtonColor); ) setFloatingActionButtonDrawable(Drawable) ((BitmapDrawable) FloatingActionButtonDrawable).getBitmap(); batilisha(); ) init batili ya umma(int FloatingActionButtonColor) ( setWillNotDraw(false); setLayerType(Tazama.LAYER_TYPE_SOFTWARE, null); mIttonPaint.ASAG_Paint mpya; mIttonPaint setColor(FloatingActionButtonColor); mButtonPaint.setStyle(Paint.Style.FILL); mButtonPaint.setShadowLayer(10.0f, 0.0f, 3.5f, Color.argb(100, 0, 0, 0)); mDrawablePaint = rangi mpya. ANTI_ALIAS_FLAG); batilisha(); ) @Override batili iliyolindwa kwenyeDraw(Canvas canvas) ( setClickable(true); canvas.drawCircle(getWidth() / 2, getHeight() / 2, (float) (getWidth() / 2.6), mButtonPaint); canvas.drawBitmap(mBitmap, (getWidth() - mBitmap.getWidth()) / 2, (getHeight() - mBitmap.getHeight()) / 2, mDrawablePaint); ) @Override public boolean onTouchEvent(MotionEvent event) ( if (event.getAction() == MotionEvent.ACTION_UP) ( setAlpha(1.0f); ) vinginevyo ikiwa (event.getAction() == MotionEvent.ACTION_DOWN) ( setAlpha(0.6) f); ) rudisha super.onTouchEvent(tukio); ) utupu wa umma hideFloatingActionButton() ( ikiwa (!mHidden) ( ObjectAnimator scaleX = ObjectAnimator.ofFloat(hii, "scaleX", 1, 0); ObjectAnimator scaleY = ObjectAnimator.ofFloat( hii, "scaleY", 1, 0); AnimatorSet animSetXY = new AnimatorSet(); animSetXY.playTogether(scaleX, scaleY); animSetXY.setInterpolator(new AccelerateInterpolator()); animSetXY.setDuration(10)X anim(10)X); ; mHidden = true; ) ) onyesho la utupu la ummaFloatingActionButton() (ikiwa (mHidden) ( ObjectAnimator scaleX = ObjectAnimator.ofFloat(hii, "scaleX", 0, 1); ObjectAnimator scaleY = ObjectAnimator.ofFloat(hii", 0 scaleY , 1); AnimatorSet animSetXY = new AnimatorSet(); animSetXY.playTogether(scaleX, scaleY); animSetXY.setInterpolator(new OvershootInterpolator()); animSetXY.setDuration(200); animSetXY.start(); mHidden = uongo; ) ) boolean ya umma isHidden() ( return mHidden; ) static public class Builder ( private FrameLayout.LayoutParams params; private final Shughuli ya shughuli; int mvuto = Mvuto.CHINI | Mvuto.HAKI; // chaguo-msingi chini kulia Inayoweza Kuchorwa; int color = Rangi.NYEUPE; ukubwa wa int = 0; kiwango cha kuelea = 0; Public Builder(Muktadha wa shughuli) ( scale = context.getResources().getDisplayMetrics().wiani;// Hesabu (thamani * mizani + 0.5f) hutumiwa sana kubadilisha dps hadi vitengo vya pikseli // kulingana na kipimo cha msongamano. // tazama developer.android.com (Inaauni Saizi Nyingi za Skrini) size = (int) (72 * mizani + 0.5f); // ukubwa chaguomsingi ni 72dp kwa 72dp params = new FrameLayout.LayoutParams(size, size); vigezo. mvuto = mvuto; this.activity = muktadha; ) /** * Huweka mvuto kwa FAB */ public Builder withGravity(int gravity) ( this.gravity = mvuto; rudisha hii; ) /** * Huweka ukingo wa FAB katika dp */ public Builder withMargins(int kushoto, int juu, int kulia, int chini) ( params.setMargins((int) (kushoto * mizani + 0.5f), (int) (juu * mizani + 0.5f), (int) (kulia * mizani + 0.5f), (int) (chini * mizani + 0.5f)); rudisha hii; ) /** * Huweka FAB inayoweza kutekelezeka */ public Builder withDrawable(final Drawable Drawable) ( hii. drawable = drawable; return this; ) /** * Inaweka rangi ya FAB */ public Builder withButtonColor(final int color) ( this.color = color; kurudisha hii; ) /** * Huweka ukubwa wa FAB katika dp */ public Builder withButtonSize(int size) ( size = (int) (size * scale + 0.5f); params = new FrameLayout.LayoutParams(size, size); rudisha hii; ) public FloatingActionButton create() (kitufe cha mwisho cha FloatingActionButton = new FloatingActionButton(shughuli); button.setFloatingActionButtonColor(this.color); button.setFloatingActionButtonDrawable(this.drawable); params.gravity = this.gravity; ViewGroup root = (TazamaKikundi) shughuli = (TazamaKikundi) .findViewById(android.R.id.content); root.addView(kifungo, vigezo); kitufe cha kurejesha; ) ) )


Wakati wa kuunda kitufe katika XML, niligundua ugumu fulani katika kuweka Mwonekano wa kitufe chetu juu ya Maoni mengine (haswa, juu ya Droo ya Kusogeza). Niliamua kutekeleza kitufe kwa utaratibu na kufanya kazi kupitia muundo wa Mjenzi, ambao utaruhusu FAB kuwekwa juu ya Maoni mengine kwenye Shughuli inapoitwa. .unda().

Kubwa! Lakini ninawezaje kuongeza hii kwenye programu yangu?

Kuongeza Kitufe cha Kitendo kinachoelea ni rahisi sana:

FloatingActionButton fabButton = FloatingActionButton.Mjenzi mpya(hii) .withDrawable(yourDrawable) .withButtonColor(Rangi.WHITE) .withGravity(Gravity.BOTTOM | Gravity.RIGHT) .na Pembezoni(0, 0,6) 16.
Ukubwa wa kifungo unaweza kubadilishwa kwa urahisi kwa kupiga simu .withButtonSize(ukubwa wa ndani). Chaguo-msingi ni 72dp.

Hitimisho

Inaonekana Google itatumia muundo huu katika programu zake nyingi. Na bado hakuna habari kuhusu ikiwa Google itaongeza kitufe cha vitendo kinachoelea kwenye maktaba ya usaidizi, kwa hivyo jisikie huru kutumia suluhisho hili kwa sasa.