大佬教程收集整理的这篇文章主要介绍了android 中viewpager+fragment仿微信底部TAG完美渐变,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
viewpager+fragment仿微信底部TAG完美渐变,在图片渐变的同时字的颜色也在变,注意,是渐变哦!
效果图:
activity_main.xml
<LinearLayout xmlns:android="http://scheR_672_11845@as.android.com/apk/res/android" xmlns:zhy="http://scheR_672_11845@as.android.com/apk/res/com.Sing.weixin" xmlns:tools="http://scheR_672_11845@as.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/id_viewpager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="fill_parent" android:layout_height="60dp" android:BACkground="@drawable/tabbg" android:orientation="horizontal" > <com.Sing.weixin.ChangeColorIconWithTextView android:id="@+id/id_inDicator_one" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:padding="5dp" zhy:icon="@drawable/ic_menu_start_conversation" zhy:text="@String/tab_one" zhy:text_size="12sp" /> <com.Sing.weixin.ChangeColorIconWithTextView android:id="@+id/id_inDicator_two" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:padding="5dp" zhy:icon="@drawable/ic_menu_friendslist" zhy:text="@String/tab_two" zhy:text_size="12sp" /> </LinearLayout> </LinearLayout>
package com.Sing.weixin; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import android.Annotation.SuppressLint; import android.os.bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.onPagechangelistener; import android.view.View; import android.view.View.onClickListener; import android.view.ViewConfiguration; @SuppressLint("NewApi") public class MainActivity extends FragmentActivity implements OnPagechangelistener,OnClickListener { private ViewPager mViewPager; // 选项卡一Fragment private FrgReturnVisit returnVisit; // 选项卡一Fragment private FrgMicroVisit microVisit; private List<ChangeColorIconWithTextView> mTabInDicator = new ArrayList<ChangeColorIconWithTextView>(); @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.activity_main); setOverflowShowingAlways(); mViewPager = (ViewPager) findViewById(R.id.id_viewpager); mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); initTabInDicator(); mViewPager.setOnPagechangelistener(this); } private void initTabInDicator() { ChangeColorIconWithTextView one = (ChangeColorIconWithTextView) findViewById(R.id.id_inDicator_onE); ChangeColorIconWithTextView two = (ChangeColorIconWithTextView) findViewById(R.id.id_inDicator_two); mTabInDicator.add(onE); mTabInDicator.add(two); one.setOnClickListener(this); two.setOnClickListener(this); one.setIconAlpha(1.0f); } @Override public void onPageSELEcted(int arg0) { } @Override public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) { if (positionOffset > 0) { ChangeColorIconWithTextView left = mTabInDicator.get(position); ChangeColorIconWithTextView right = mTabInDicator.get(position + 1); left.setIconAlpha(1 - positionOffset); right.setIconAlpha(positionOffset); } } @Override public void onPageScrollStateChanged(int statE) { } @Override public void onClick(View v) { resetOtherTabs(); switch (v.getId()) { case R.id.id_inDicator_one: mTabInDicator.get(0).setIconAlpha(1.0f); mViewPager.setCurrentItem(0,falsE); break; case R.id.id_inDicator_two: mTabInDicator.get(1).setIconAlpha(1.0f); mViewPager.setCurrentItem(1,falsE); break; } } /** * 重置其他的Tab */ private void resetOtherTabs() { for (int i = 0; i < mTabInDicator.size(); i++) { mTabInDicator.get(i).setIconAlpha(0); } } private void setOverflowShowingAlways() { try { // true if a peRMANent menu key is present,false otherwise. ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPeRMANentMenuKey"); menuKeyField.setAccessible(true); menuKeyField.setBoolean(config,falsE); } catch (Exception E) { e.printStackTrace(); } } public class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } private final String[] titles = { "选项一","选项二"}; @Override public CharSequence getPagetitle(int position) { return titles[position]; } @Override public int getCount() { return titles.length; } @Override public Fragment getItem(int position) { switch (position) { case 0: if (returnVisit == null) { returnVisit = new FrgReturnVisit(); } return returnVisit; case 1: if (microVisit == null) { microVisit = new FrgMicroVisit(); } return microVisit; default: return null; } } } }
ChangeColorIconWithTextView.java
package com.Sing.weixin; import android.content.Context; import android.content.res.TypedArray; import android.graphics.bitmap; import android.graphics.bitmap.Config; import android.graphics.bitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.bitmapDrawable; import android.os.bundle; import android.os.Looper; import android.os.Parcelable; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; public class ChangeColorIconWithTextView extends View { private Bitmap mBitmap; private Canvas mCanvas; private Paint mPaint; /** * 颜色 */ privatE int mColor = 0xFF45c01A; /** * 透明度 0.0-1.0 */ private float mAlpha = 0f; /** * 图标 */ private Bitmap mIconBitmap; /** * 限制绘制icon的范围 */ private Rect mIconRect; /** * icon底部文本 */ private String mText = "demo"; privatE int mTextSize = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP,10,getresources().getDisplaymetrics()); private Paint mTextPaint; private Rect mTextBound = new Rect(); public ChangeColorIconWithTextView(Context context) { super(context); } /** * 初始化自定义属性值 * * @param context * @param attrs */ public ChangeColorIconWithTextView(Context context,AttributeSet attrs) { super(context,attrs); // 获取设置的图标 TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.ChangeColorIconView); int n = a.geTindexCount(); for (int i = 0; i < n; i++) { int attr = a.geTindex(i); switch (attr) { case R.styleable.ChangeColorIconView_icon: BitmapDrawable drawable = (BitmapDrawablE) a.getDrawable(attr); mIconBitmap = drawable.getBitmap(); break; case R.styleable.ChangeColorIconView_color: mColor = a.getColor(attr,0x45c01A); break; case R.styleable.ChangeColorIconView_text: mText = a.getString(attr); break; case R.styleable.ChangeColorIconView_text_size: mTextSize = (int) a.getDimension(attr,TypedValue .applyDimension(TypedValue.COMPLEX_UNIT_SP,getresources().getDisplaymetrics())); break; } } a.recycle(); mTextPaint = new Paint(); mTextPaint.setTextSize(mTextSizE); mTextPaint.setColor(0xff555555); // 得到text绘制范围 mTextPaint.getTextBounds(mText,mText.length(),mTextBound); } @Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpeC) { super.onMeasure(widthMeasureSpec,heightMeasureSpec); // 得到绘制icon的宽 int bitmapWidth = Math.min(getMeasuredWidth() - getPaddingLeft() - getPaddingRight(),getMeasuredHeight() - getPaddingTop() - getPaddingBottom() - mTextBound.height()); int left = getMeasuredWidth() / 2 - bitmapWidth / 2; int top = (getMeasuredHeight() - mTextBound.height()) / 2 - bitmapWidth / 2; // 设置icon的绘制范围 mIconRect = new Rect(left,top,left + bitmapWidth,top + bitmapWidth); } @Override protected void onDraw(Canvas canvas) { int alpha = (int) Math.ceil((255 * mAlpha)); canvas.drawBitmap(mIconBitmap,null,mIconRect,null); setupTargetBitmap(alpha); drawsourceText(canvas,alpha); drawTargetText(canvas,alpha); canvas.drawBitmap(mBitmap,null); } private void setupTargetBitmap(int alpha) { mBitmap = Bitmap.createBitmap(getMeasuredWidth(),getMeasuredHeight(),Config.ARGB_8888); mCanvas = new Canvas(mBitmap); mPaint = new Paint(); mPaint.setColor(mColor); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setAlpha(alpha); mCanvas.drawRect(mIconRect,mPaint); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); mPaint.setAlpha(255); mCanvas.drawBitmap(mIconBitmap,mPaint); } private void drawsourceText(Canvas canvas,int alpha) { mTextPaint.setTextSize(mTextSizE); mTextPaint.setColor(0xff333333); mTextPaint.setAlpha(255 - alpha); canvas.drawText(mText,mIconRect.left + mIconRect.width() / 2 - mTextBound.width() / 2,mIconRect.bottom + mTextBound.height(),mTextPaint); } private void drawTargetText(Canvas canvas,int alpha) { mTextPaint.setColor(mColor); mTextPaint.setAlpha(alpha); canvas.drawText(mText,mTextPaint); } public void setIconAlpha(float alpha) { this.mAlpha = alpha; invalidateView(); } private void invalidateView() { if (Looper.getMainLooper() == Looper.myLooper()) { invalidate(); } else { posTinvalidate(); } } public void setIconColor(int color) { mColor = color; } public void setIcon(int resId) { this.mIconBitmap = BitmapFactory.decoderesource(getresources(),resId); if (mIconRect != null) invalidateView(); } public void setIcon(Bitmap iconBitmap) { this.mIconBitmap = iconBitmap; if (mIconRect != null) invalidateView(); } private static final String INSTANCE_STATE = "instance_state"; private static final String STATE_ALPHA = "state_alpha"; @Override protected Parcelable onSaveInstanceState() { Bundle bundle = new Bundle(); bundle.putParcelable(INSTANCE_STATE,super.onSaveInstanceState()); bundle.putFloat(STATE_ALPHA,mAlpha); return bundle; } @Override protected void onRestoreInstanceState(Parcelable statE) { if (state instanceof BundlE) { Bundle bundle = (BundlE) state; mAlpha = bundle.getFloat(STATE_ALPHA); super.onRestoreInstanceState(bundle.getParcelable(INSTANCE_STATE)); } else { super.onRestoreInstanceState(statE); } } }
github:https://github.com/ganchuanpu/Demo_Sing_weixin
以上所述是小编给大家介绍的android 中viewpager+fragment仿微信底部TAG完美渐变效果,希望对大家有所帮助!
以上是大佬教程为你收集整理的android 中viewpager+fragment仿微信底部TAG完美渐变全部内容,希望文章能够帮你解决android 中viewpager+fragment仿微信底部TAG完美渐变所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。