微信主界面

转载 :http://blog.csdn.net/lmj623565791/article/details/41087219

这里写图片描述
Activity

public class Main2Activity extends FragmentActivity implements ViewPager.OnPageChangeListener,View.OnClickListener{
   private ViewPager mViewPager;
    private List<Fragment> mTabs = new ArrayList<>();
    private FragmentPagerAdapter mAdapter;
    private String []mTitles = new String[]{"First Fragemt!","Second Fragment!","Third Fragment","Fourth Fragment"};
    private List<ChangeColorIconWithTextView> mTabIndicator = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        mViewPager = (ViewPager) findViewById(R.id.viewpager);

        initDatas();

        mViewPager.setAdapter(mAdapter);
        mViewPager.setOnPageChangeListener(this);
}

    private List<TextView> tList = new ArrayList<>();

    private void initDatas() {
        for(String title:mTitles){
            int  i  = 1;
            Fragment fragment = new BlankFragment();
            mTabs.add(fragment);
            i++;
        }
        mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return mTabs.get(position);
            }

            @Override
            public int getCount() {
                return mTabs.size();
            }
        };
        ChangeColorIconWithTextView one = (ChangeColorIconWithTextView) findViewById(R.id.indicator_one);
        ChangeColorIconWithTextView two = (ChangeColorIconWithTextView) findViewById(R.id.indicator_two);
        ChangeColorIconWithTextView three = (ChangeColorIconWithTextView) findViewById(R.id.indicator_three);
        ChangeColorIconWithTextView four = (ChangeColorIconWithTextView) findViewById(R.id.indicator_four);

        mTabIndicator.add(one);
        mTabIndicator.add(two);
        mTabIndicator.add(three);
        mTabIndicator.add(four);

        one.setOnClickListener(this);
        two.setOnClickListener(this);
        three.setOnClickListener(this);
        four.setOnClickListener(this);
        one.setIconAlpha(1.0f);
    }

    @Override
    public void onClick(View v) {
        for (int i = 0; i < mTabIndicator.size(); i++)
        {
            mTabIndicator.get(i).setIconAlpha(0);
        }
        switch (v.getId())
        {
            case R.id.indicator_one:
                mTabIndicator.get(0).setIconAlpha(1.0f);
                mViewPager.setCurrentItem(0, false);
                break;
            case R.id.indicator_two:
                mTabIndicator.get(1).setIconAlpha(1.0f);
                mViewPager.setCurrentItem(1, false);
                break;
            case R.id.indicator_three:
                mTabIndicator.get(2).setIconAlpha(1.0f);
                mViewPager.setCurrentItem(2, false);
                break;
            case R.id.indicator_four:
                mTabIndicator.get(3).setIconAlpha(1.0f);
                mViewPager.setCurrentItem(3, false);
                break;

        }
    }

    @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 onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

自定义

public class ChangeColorIconWithTextView extends View {
    private Bitmap mBitmap;
    private Canvas mCanvas;
    private Paint mPaint;
    //颜色
    private int mColor = 0xff45c01a;
    //透明度
    private float mAlpha= 0f;
    //图标
    private Bitmap mIconBitmap;
    //限制绘制icon范围
    private Rect mIconRect;
    //icon 底部文本
    private String mText = "微信";
    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) {
        this(context,null);
    }

    public ChangeColorIconWithTextView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ChangeColorIconWithTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ChangeColorIconText,defStyleAttr,0);
        int count = typedArray.getIndexCount();
        for (int i = 0; i < count; i++) {
            int attr = typedArray.getIndex(i);
            switch (attr){
                case R.styleable.ChangeColorIconText_colori:
                     mColor = typedArray.getColor(attr, mColor);
                    break;
                case R.styleable.ChangeColorIconText_iconi:
                    BitmapDrawable drawable = (BitmapDrawable) typedArray.getDrawable(attr);

                    mIconBitmap =drawable.getBitmap() ;
                    break;
                case R.styleable.ChangeColorIconText_text:
                     mText =  typedArray.getString(attr);
                    break;
                case R.styleable.ChangeColorIconText_text_size:
                    mTextSize = (int) typedArray.getDimension(attr, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,10,getResources().getDisplayMetrics()));
                    break;
            }
        }
        typedArray.recycle();
        mTextPaint = new Paint();
        mTextPaint.setTextSize(mTextSize);
        mTextPaint.setColor(0xff555555);
        //得到text绘制的范围
        mTextPaint.getTextBounds(mText,0,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, 0, 0, null);
    }

    private void drawTargetText(Canvas canvas, int alpha) {
        mTextPaint.setColor(mColor);
        mTextPaint.setAlpha(alpha);
        canvas.drawText(mText, mIconRect.left + mIconRect.width() / 2-mTextBound.width()/2, mIconRect.bottom + mTextBound.height(), mTextPaint);
    }

    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 setupTargetBitmap(int alpha) {
        mBitmap = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.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, null, mIconRect, mPaint);
    }
    public void setIconAlpha(float alpha){
        this.mAlpha = alpha;
        invalidateView();
    }
    private void invalidateView(){
        if(Looper.getMainLooper() == Looper.myLooper()){
            invalidate();
        }else{
            postInvalidate();
        }
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:xxl="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    tools:context="com.example.administrator.testapplication.Main2Activity">
  <android.support.v4.view.ViewPager
      android:id="@+id/viewpager"
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="1"
      ></android.support.v4.view.ViewPager>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#22aaff77"
    android:orientation="horizontal"
    >
  <com.example.administrator.testapplication.ChangeColorIconWithTextView
      android:id="@+id/indicator_one"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:padding="5dp"
      android:layout_weight="1"
      xxl:iconi="@mipmap/ic_menu_start_conversation"
      xxl:text="消息"
      xxl:text_size="12sp"
      >
  </com.example.administrator.testapplication.ChangeColorIconWithTextView>

  <com.example.administrator.testapplication.ChangeColorIconWithTextView
      android:id="@+id/indicator_two"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:padding="5dp"
      android:layout_weight="1"
      xxl:iconi="@mipmap/ic_menu_friendslist"
      xxl:text="朋友"
      xxl:text_size="12sp"
      >
  </com.example.administrator.testapplication.ChangeColorIconWithTextView>

  <com.example.administrator.testapplication.ChangeColorIconWithTextView
      android:id="@+id/indicator_three"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:padding="5dp"
      android:layout_weight="1"
      xxl:iconi="@mipmap/ic_menu_emoticons"
      xxl:text="发现"
      xxl:text_size="12sp"
      >
  </com.example.administrator.testapplication.ChangeColorIconWithTextView>

  <com.example.administrator.testapplication.ChangeColorIconWithTextView
      android:id="@+id/indicator_four"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:padding="5dp"
      android:layout_weight="1"
      xxl:iconi="@mipmap/ic_menu_allfriends"
      xxl:text="全部"
      xxl:text_size="12sp"
      >
  </com.example.administrator.testapplication.ChangeColorIconWithTextView>

</LinearLayout>

</LinearLayout>

fragment

public class BlankFragment extends Fragment {
    private String mTitle = "Default";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }
    @Override
    public void onDetach() {
        super.onDetach();

    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值