毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

Android高仿微信6.0界面切换图标变色源代码下载

更新时间:2014-11-17:  来源:毕业论文

Android高仿微信6.0界面切换图标变色源代码下载
1、概述

Android高仿微信6.0界面切换图标变色源代码下载
学习Android少不了模仿各种app的界面,自从微信6.0问世以后,就觉得微信切换时那个变色的Tab图标屌屌的,今天我就带大家自定义控件,带你变色变得飞起~~

好了,下面先看下效果图:


清晰度不太好,大家凑合看~~有木有觉得这个颜色弱爆了了的,,,下面我动动手指给你换个颜色:


有没有这个颜色比较妖一点~~~好了~下面开始介绍原理。

2、原理介绍

通过上面的效果图,大家可能也猜到了,我们的图标并非是两张图片,而是一张图,并且目标颜色是可定制的,谁让现在动不动就谈个性化呢。

那么我们如何做到,可以让图标随心所遇的变色了,其实原理,下面你将看到一张熟悉的图:


有没有很熟悉的感脚,我们实际上还是利用了Paint的Xfermode,这次我们使用的是:Mode.DST_IN

Dst_IN回顾一下什么效果,先绘制Dst,设置Mode,再绘制Src,则显示的是先后绘图的交集区域,且是Dst.

再仔细观察下我们的图标:


为了方便大家的观看,我特意拿ps选择了一下我们图标的非透明区域,可以看到,我们这个小机器人非透明区域就是被线框起来的部分。

然后,我们图标变色的原理就出现了:

1、先绘制一个颜色(例如:粉红)

2、设置Mode=DST_IN

3、绘制我们这个可爱的小机器人

回答我,显示什么,是不是显示交集,交集是什么?交集是我们的小机器人的非透明区域,也就是那张脸,除了两个眼;

好了,那怎么变色呢?

我绘制一个颜色的时候,难道不能设置alpha么~~~

到此,大家应该已经了解了我们图标的绘制的原理了吧。


3、自定义图标控件

我们的整个界面不用说,是ViewPager+Fragment ,现在关注的是底部~~

接下来我们考虑,底部的Tab,Tab我们的布局是LinearLayout,内部四个View,通过设置weight达到均分~~

这个View就是我们的自定义的图标控件了,我们叫做:ChangeColorIconWithTextView

接下来考虑,应该有什么属性公布出来

1、自定义属性

想了一下,我决定把图标,图标颜色,图标下显示的文字,文字大小这四个属性作为自定义属性。

那就自定义属性走起了:

a、values/attr.xml

<?xml version="1.0" encoding="utf-8"?>  
  1. <resources>  
  2.   
  3.     <attr name="icon" format="reference" />  
  4.     <attr name="color" format="color" />  
  5.     <attr name="text" format="string" />  
  6.     <attr name="text_size" format="dimension" />  
  7.   
  8.     <declare-styleable name="ChangeColorIconView">  
  9.         <attr name="icon" />  
  10.         <attr name="color" />  
  11.         <attr name="text" />  
  12.         <attr name="text_size" />  
  13.     </declare-styleable>  
  14.   
  15. </resources>  

b、在布局文件中使用

<com.zhy.weixin6.ui.ChangeColorIconWithTextView  
  1.            android:id="@+id/id_indicator_one"  
  2.            android:layout_width="0dp"  
  3.            android:layout_height="fill_parent"  
  4.            android:layout_weight="1"  
  5.            android:padding="5dp"  
  6.            zhy:icon="@drawable/ic_menu_start_conversation"  
  7.            zhy:text="@string/tab_weixin"  
  8.            zhy:text_size="12sp" />  

自己注意命名空间的写法,xmlns:zhy="http://schemas.android.com/apk/res/应用的包名"。

c、在构造方法中获取

public class ChangeColorIconWithTextView extends View  
  1. {  
  2.   
  3.     private Bitmap mBitmap;  
  4.     private Canvas mCanvas;  
  5.     private Paint mPaint;  
  6.     /** 
  7.      * 颜色 
  8.      */  
  9.     private int mColor = 0xFF45C01A;  
  10.     /** 
  11.      * 透明度 0.0-1.0 
  12.      */  
  13.     private float mAlpha = 0f;  
  14.     /** 
  15.      * 图标 
  16.      */  
  17.     private Bitmap mIconBitmap;  
  18.     /** 
  19.      * 限制绘制icon的范围 
  20.      */  
  21.     private Rect mIconRect;  
  22.     /** 
  23.      * icon底部文本 
  24.      */  
  25.     private String mText = "微信";  
  26.     private int mTextSize = (int) TypedValue.applyDimension(  
  27.             TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics());  
  28.     private Paint mTextPaint;  
  29.     private Rect mTextBound = new Rect();  
  30.   
  31.     public ChangeColorIconWithTextView(Context context)  
  32.     {  
  33.         super(context);  
  34.     }  
  35.   
  36.     /** 
  37.      * 初始化自定义属性值 
  38.      *  
  39.      * @param context 
  40.      * @param attrs 
  41.      */  
  42.     public ChangeColorIconWithTextView(Context context, AttributeSet attrs)  
  43.     {  
  44.         super(context, attrs);  
  45.   
  46.         // 获取设置的图标  
  47.         TypedArray a = context.obtainStyledAttributes(attrs,  
  48.                 R.styleable.ChangeColorIconView);  
  49.   
  50.         int n = a.getIndexCount();  
  51.         for (int i = 0; i < n; i++)  
  52.         {  
  53.   
  54.             int attr = a.getIndex(i);  
  55.             switch (attr)  
  56.             {  
  57.             case R.styleable.ChangeColorIconView_icon:  
  58.                 BitmapDrawable drawable = (BitmapDrawable) a.getDrawable(attr);  
  59.                 mIconBitmap = drawable.getBitmap();  
  60.                 break;  
  61.             case R.styleable.ChangeColorIconView_color:  
  62.                 mColor = a.getColor(attr, 0x45C01A);  
  63.                 break;  
  64.             case R.styleable.ChangeColorIconView_text:  
  65.                 mText = a.getString(attr);  
  66.                 break;  
  67.             case R.styleable.ChangeColorIconView_text_size:  
  68.                 mTextSize = (int) a.getDimension(attr, TypedValue  
  69.                         .applyDimension(TypedValue.COMPLEX_UNIT_SP, 10,  
  70.                                 getResources().getDisplayMetrics()));  
  71.                 break;  
  72.   
  73.             }  
  74.         }  
  75.   
  76.         a.recycle();  
  77.   
  78.         mTextPaint = new Paint();  
  79.         mTextPaint.setTextSize(mTextSize);  
  80.         mTextPaint.setColor(0xff555555);  
  81.         // 得到text绘制范围  
  82.         mTextPaint.getTextBounds(mText, 0, mText.length(), mTextBound);  
  83.   
  84.     }  

可以看到,我们在构造方法中获取了自定义的属性,并且计算了文本占据的控件存在我们的mTextBound中。

2、图标的绘制区域的选择

我们考虑下,有了属性,我们需要绘制一个文本,文本之上一个图标,我们怎么去控制绘制的区域呢?
我们的View显示区域,无非以下三种情况:


针对这三种情况,我门的图标的边长应该是什么呢?

我觉得边长应该是:控件的高度-文本的高度-内边距   与  控件的宽度-内边距  两者的小值;大家仔细推敲一下;

好了,有了上面的边长的结论,我们就开始计算图标的绘制范围了:

@Override  
  1. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)  
  2. {  
  3.     super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  4.   
  5.     // 得到绘制icon的宽  
  6.     int bitmapWidth = Math.min(getMeasuredWidth() - getPaddingLeft()  
  7.             - getPaddingRight(), getMeasuredHeight() - getPaddingTop()  
  8.             - getPaddingBottom() - mTextBound.height());  
  9.   
  10.     int left = getMeasuredWidth() / 2 - bitmapWidth / 2;  
  11.     int top = (getMeasuredHeight() - mTextBound.height()) / 2 - bitmapWidth  
  12.             / 2;  
  13.     // 设置icon的绘制范围  
  14.     mIconRect = new Rect(left, top, left + bitmapWidth, top + bitmapWidth);  
  15.   
  16. }  

3、绘制图标

绘制图标有很多步骤呀,我来列一列

1、计算alpha(默认为0)

2、绘制原图

3、在绘图区域,绘制一个纯色块(设置了alpha),此步绘制在内存的bitmap上

4、设置mode,针对内存中的bitmap上的paint

5、绘制我们的图标,此步绘制在内存的bitmap上

6、绘制原文本

7、绘制设置alpha和颜色后的文本

8、将内存中的bitmap绘制出来

根据上面的步骤,可以看出来,我们的图标其实绘制了两次,为什么要绘制原图呢,因为我觉得比较好看。

3-5步骤,就是我们上面分析的原理

6-7步,是绘制文本,可以看到,我们的文本就是通过设置alpha实现的

@Override  
  1.     protected void onDraw(Canvas canvas)  
  2.     {  
  3.   
  4.         int alpha = (int) Math.ceil((255 * mAlpha));  
  5.         canvas.drawBitmap(mIconBitmap, null, mIconRect, null);  
  6.         setupTargetBitmap(alpha);  
  7.         drawSourceText(canvas, alpha);  
  8.         drawTargetText(canvas, alpha);  
  9.         canvas.drawBitmap(mBitmap, 00null);  
  10.   
  11.     }  
  12.       
  13.     private void setupTargetBitmap(int alpha)  
  14.     {  
  15.         mBitmap = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(),  
  16.                 Config.ARGB_8888);  
  17.         mCanvas = new Canvas(mBitmap);  
  18.         mPaint = new Paint();  
  19.         mPaint.setColor(mColor);  
  20.         mPaint.setAntiAlias(true);  
  21.         mPaint.setDither(true);  
  22.         mPaint.setAlpha(alpha);  
  23.         mCanvas.drawRect(mIconRect, mPaint);  
  24.         mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));  
  25.         mPaint.setAlpha(255);  
  26.         mCanvas.drawBitmap(mIconBitmap, null, mIconRect, mPaint);  
  27.     }  
  28.   
  29.     private void drawSourceText(Canvas canvas, int alpha)  
  30.     {  
  31.         mTextPaint.setTextSize(mTextSize);  
  32.         mTextPaint.setColor(0xff333333);  
  33.         mTextPaint.setAlpha(255 - alpha);  
  34.         canvas.drawText(mText, mIconRect.left + mIconRect.width() / 2  
  35.                 - mTextBound.width() / 2,  
  36.                 mIconRect.bottom + mTextBound.height(), mTextPaint);  
  37.     }  
  38.       
  39.     private void drawTargetText(Canvas canvas, int alpha)  
  40.     {  
  41.         mTextPaint.setColor(mColor);  
  42.         mTextPaint.setAlpha(alpha);  
  43.         canvas.drawText(mText, mIconRect.left + mIconRect.width() / 2  
  44.                 - mTextBound.width() / 2,  
  45.                 mIconRect.bottom + mTextBound.height(), mTextPaint);  
  46.           
  47.     }  

关于绘制文本区域的计算,首先是起点x:mIconRect.left + mIconRect.width() / 2- mTextBound.width() / 2 有点长哈,文本mIconRect.left + mIconRect.width() / 2这个位置,在图标水平区域的中心点,这个应该没有疑问;图标水平区域的中点- mTextBound.width() / 2 开始绘制文本,是不是就是居中在图标的下面;

有人可能会问:你怎么知道文本宽度小于图标,我有5个字咋办?5个字怎么了,照样是居中显示,不信你试试~~

4、公布设置透明度的方法

到此,我们的图标控件写完了,但是还没有把我们的控制icon的方法放出去:

public void setIconAlpha(float alpha)  
  1. {  
  2.     this.mAlpha = alpha;  
  3.     invalidateView();  
  4. }  
  5.   
  6. private void invalidateView()  
  7. {  
  8.     if (Looper.getMainLooper() == Looper.myLooper())  
  9.     {  
  10.         invalidate();  
  11.     } else  
  12.     {  
  13.         postInvalidate();  
  14.     }  
  15. }  

我们叫做setIconAlpha,避免了和setAlpha冲突,设置完成后,invalidate一下~~~


到此就真的结束了,接下来看用法。


4、实战


1、布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  1.     xmlns:zhy="http://schemas.android.com/apk/res/com.zhy.weixin6.ui"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/id_viewpager"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="0dp"  
  11.         android:layout_weight="1" >  
  12.     </android.support.v4.view.ViewPager>  
  13.   
  14.     <LinearLayout  
  15.         android:layout_width="fill_parent"  
  16.         android:layout_height="60dp"  
  17.         android:background="@drawable/tabbg"  
  18.         android:orientation="horizontal" >  
  19.   
  20.         <com.zhy.weixin6.ui.ChangeColorIconWithTextView  
  21.             android:id="@+id/id_indicator_one"  
  22.             android:layout_width="0dp"  
  23.             android:layout_height="fill_parent"  
  24.             android:layout_weight="1"  
  25.             android:padding="5dp"  
  26.             zhy:icon="@drawable/ic_menu_start_conversation"  
  27.             zhy:text="@string/tab_weixin"  
  28.             zhy:text_size="12sp" />  
  29.   
  30.         <com.zhy.weixin6.ui.ChangeColorIconWithTextView  
  31.             android:id="@+id/id_indicator_two"  
  32.             android:layout_width="0dp"  
  33.             android:layout_height="fill_parent"  
  34.             android:layout_weight="1"  
  35.             android:padding="5dp"  
  36.             zhy:icon="@drawable/ic_menu_friendslist"  
  37.             zhy:text="@string/tab_contact"  
  38.             zhy:text_size="12sp" />  
  39.   
  40.         <com.zhy.weixin6.ui.ChangeColorIconWithTextView  
  41.             android:id="@+id/id_indicator_three"  
  42.             android:layout_width="0dp"  
  43.             android:layout_height="fill_parent"  
  44.             android:layout_weight="1"  
  45.             android:padding="5dp"  
  46.             zhy:icon="@drawable/ic_menu_emoticons"  
  47.             zhy:text="@string/tab_find"  
  48.             zhy:text_size="12sp" />  
  49.   
  50.         <com.zhy.weixin6.ui.ChangeColorIconWithTextView  
  51.             android:id="@+id/id_indicator_four"  
  52.             android:layout_width="0dp"  
  53.             android:layout_height="fill_parent"  
  54.             android:layout_weight="1"  
  55.             android:padding="5dp"  
  56.             zhy:icon="@drawable/ic_menu_allfriends"  
  57.             zhy:text="@string/tab_me"  
  58.             zhy:text_size="12sp" />  
  59.     </LinearLayout>  
  60.   
  61. </LinearLayout>  

2、MainActivity

package com.zhy.weixin6.ui;  
  1.   
  2. import java.lang.reflect.Field;  
  3. import java.lang.reflect.Method;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import android.annotation.SuppressLint;  
  8. import android.os.Bundle;  
  9. import android.support.v4.app.Fragment;  
  10. import android.support.v4.app.FragmentActivity;  
  11. import android.support.v4.app.FragmentPagerAdapter;  
  12. import android.support.v4.view.ViewPager;  
  13. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  14. import android.view.Menu;  
  15. import android.view.View;  
  16. import android.view.View.OnClickListener;  
  17. import android.view.ViewConfiguration;  
  18. import android.view.Window;  
  19.   
  20. @SuppressLint("NewApi")  
  21. public class MainActivity extends FragmentActivity implements  
  22.         OnPageChangeListener, OnClickListener  
  23. {  
  24.     private ViewPager mViewPager;  
  25.     private List<Fragment> mTabs = new ArrayList<Fragment>();  
  26.     private FragmentPagerAdapter mAdapter;  
  27.   
  28.     private String[] mTitles = new String[] { "First Fragment!",  
  29.             "Second Fragment!""Third Fragment!""Fourth Fragment!" };  
  30.   
  31.     private List<ChangeColorIconWithTextView> mTabIndicator = new ArrayList<ChangeColorIconWithTextView>();  
  32.   
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState)  
  35.     {  
  36.         super.onCreate(savedInstanceState);  
  37.         setContentView(R.layout.activity_main);  
  38.   
  39.         setOverflowShowingAlways();  
  40.         getActionBar().setDisplayShowHomeEnabled(false);  
  41.         mViewPager = (ViewPager) findViewById(R.id.id_viewpager);  
  42.   
  43.         initDatas();  
  44.   
  45.         mViewPager.setAdapter(mAdapter);  
  46.         mViewPager.setOnPageChangeListener(this);  
  47.     }  
  48.   
  49.     private void initDatas()  
  50.     {  
  51.   
  52.         for (String title : mTitles)  
  53.         {  
  54.             TabFragment tabFragment = new TabFragment();  
  55.             Bundle args = new Bundle();  
  56.             args.putString("title", title);  
  57.             tabFragment.setArguments(args);  
  58.             mTabs.add(tabFragment);  
  59.         }  
  60.   
  61.         mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())  
  62.         {  
  63.   
  64.             @Override  
  65.             public int getCount()  
  66.             {  
  67.                 return mTabs.size();  
  68.             }  
  69.   
  70.             @Override  
  71.             public Fragment getItem(int arg0)  
  72.             {  
  73.                 return mTabs.get(arg0);  
  74.             }  
  75.         };  
  76.   
  77.         initTabIndicator();  
  78.   
  79.     }  
  80.   
  81.     @Override  
  82.     public boolean onCreateOptionsMenu(Menu menu)  
  83.     {  
  84.         getMenuInflater().inflate(R.menu.main, menu);  
  85.         return true;  
  86.     }  
  87.   
  88.     private void initTabIndicator()  
  89.     {  
  90.         ChangeColorIconWithTextView one = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_one);  
  91.         ChangeColorIconWithTextView two = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_two);  
  92.         ChangeColorIconWithTextView three = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_three);  
  93.         ChangeColorIconWithTextView four = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_four);  
  94.   
  95.         mTabIndicator.add(one);  
  96.         mTabIndicator.add(two);  
  97.         mTabIndicator.add(three);  
  98.         mTabIndicator.add(four);  
  99.   
  100.         one.setOnClickListener(this);  
  101.         two.setOnClickListener(this);  
  102.         three.setOnClickListener(this);  
  103.         four.setOnClickListener(this);  
  104.   
  105.         one.setIconAlpha(1.0f);  
  106.     }  
  107.   
  108.     @Override  
  109.     public void onPageSelected(int arg0)  
  110.     {  
  111.     }  
  112.   
  113.     @Override  
  114.     public void onPageScrolled(int position, float positionOffset,  
  115.             int positionOffsetPixels)  
  116.     {  
  117.         // Log.e("TAG", "position = " + position + " , positionOffset = "  
  118.         // + positionOffset);  
  119.   
  120.         if (positionOffset > 0)  
  121.         {  
  122.             ChangeColorIconWithTextView left = mTabIndicator.get(position);  
  123.             ChangeColorIconWithTextView right = mTabIndicator.get(position + 1);  
  124.   
  125.             left.setIconAlpha(1 - positionOffset);  
  126.             right.setIconAlpha(positionOffset);  
  127.         }  
  128.   
  129.     }  
  130.   
  131.     @Override  
  132.     public void onPageScrollStateChanged(int state)  
  133.     {  
  134.   
  135.     }  
  136.   
  137.     @Override  
  138.     public void onClick(View v)  
  139.     {  
  140.   
  141.         resetOtherTabs();  
  142.   
  143.         switch (v.getId())  
  144.         {  
  145.         case R.id.id_indicator_one:  
  146.             mTabIndicator.get(0).setIconAlpha(1.0f);  
  147.             mViewPager.setCurrentItem(0false);  
  148.             break;  
  149.         case R.id.id_indicator_two:  
  150.             mTabIndicator.get(1).setIconAlpha(1.0f);  
  151.             mViewPager.setCurrentItem(1false);  
  152.             break;  
  153.         case R.id.id_indicator_three:  
  154.             mTabIndicator.get(2).setIconAlpha(1.0f);  
  155.             mViewPager.setCurrentItem(2false);  
  156.             break;  
  157.         case R.id.id_indicator_four:  
  158.             mTabIndicator.get(3).setIconAlpha(1.0f);  
  159.             mViewPager.setCurrentItem(3false);  
  160.             break;  
  161.   
  162.         }  
  163.   
  164.     }  
  165.   
  166.     /** 
  167.      * 重置其他的Tab 
  168.      */  
  169.     private void resetOtherTabs()  
  170.     {  
  171.         for (int i = 0; i < mTabIndicator.size(); i++)  
  172.         {  
  173.             mTabIndicator.get(i).setIconAlpha(0);  
  174.         }  
  175.     }  
  176.   
  177.     @Override  
  178.     public boolean onMenuOpened(int featureId, Menu menu)  
  179.     {  
  180.         if (featureId == Window.FEATURE_ACTION_BAR && menu != null)  
  181.         {  
  182.             if (menu.getClass().getSimpleName().equals("MenuBuilder"))  
  183.             {  
  184.                 try  
  185.                 {  
  186.                     Method m = menu.getClass().getDeclaredMethod(  
  187.                             "setOptionalIconsVisible", Boolean.TYPE);  
  188.                     m.setAccessible(true);  
  189.                     m.invoke(menu, true);  
  190.                 } catch (Exception e)  
  191.                 {  
  192.                 }  
  193.             }  
  194.         }  
  195.         return super.onMenuOpened(featureId, menu);  
  196.     }  
  197.   
  198.     private void setOverflowShowingAlways()  
  199.     {  
  200.         try  
  201.         {  
  202.             // true if a permanent menu key is present, false otherwise.  
  203.             ViewConfiguration config = ViewConfiguration.get(this);  
  204.             Field menuKeyField = ViewConfiguration.class  
  205.                     .getDeclaredField("sHasPermanentMenuKey");  
  206.             menuKeyField.setAccessible(true);  
  207.             menuKeyField.setBoolean(config, false);  
  208.         } catch (Exception e)  
  209.         {  
  210.             e.printStackTrace();  
  211.         }  
  212.     }  
  213.   
  214. }  

Activity里面代码虽然没什么注释,但是很简单哈,就是初始化Fragment,得到我们的适配器,然后设置给ViewPager;

initTabIndicator我们初始化我们的自定义控件,以及加上了点击事件;

唯一一个需要指出的就是:

我们在onPageScrolled中,动态的获取position以及positionOffset,然后拿到左右两个View,设置positionOffset ;

所以,我们这里简单找了下规律,已经没有if else的身影了~~~

还剩两个反射的方法,是控制Actionbar的图标的,和点击menu按键,将ActionBar的menu显示在正常区域的~~

3、TabFragment

package com.zhy.weixin6.ui;  
  1.   
  2. import android.graphics.Color;  
  3. import android.os.Bundle;  
  4. import android.support.v4.app.Fragment;  
  5. import android.view.Gravity;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.TextView;  
  10.   
  11. public class TabFragment extends Fragment  
  12. {  
  13.     private String mTitle = "Default";  
  14.       
  15.   
  16.     public TabFragment()  
  17.     {  
  18.     }  
  19.   
  20.     @Override  
  21.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  22.             Bundle savedInstanceState)  
  23.     {  
  24.         if (getArguments() != null)  
  25.         {  
  26.             mTitle = getArguments().getString("title");  
  27.         }  
  28.   
  29.         TextView textView = new TextView(getActivity());  
  30.         textView.setTextSize(20);  
  31.         textView.setBackgroundColor(Color.parseColor("#ffffffff"));  
  32.         textView.setGravity(Gravity.CENTER);  
  33.         textView.setText(mTitle);  
  34.         return textView;  
  35.     }  
  36. }  
Android高仿微信6.0界面切换图标变色源代码下载下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。