本文实例为大家分享了AndroID仿安卓微信6.0的具体代码,供大家参考,具体内容如下
wechat6Activity.java的代码:
package siso.geekworld;import androID.app.Activity;import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.support.v4.app.FragmentActivity;import androID.support.v4.app.FragmentPagerAdapter;import androID.support.v4.vIEw.VIEwPager;import androID.vIEw.Menu;import androID.vIEw.VIEw;import androID.vIEw.VIEwConfiguration;import androID.vIEw.Window;import java.lang.reflect.FIEld;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import vIEwhelper.ChangecolorIconWithText;import vIEwhelper.TabFragment;public class wechat6Activity extends FragmentActivity implements VIEw.OnClickListener,VIEwPager.OnPagechangelistener{ private VIEwPager vIEwPager; private List<Fragment> mTabs = new ArrayList<>(); private String[] mTitles = new String[]{"First Fragment","Second Fragment","Third Fragment","Fourth Fragment"}; private FragmentPagerAdapter adapter; private List<ChangecolorIconWithText> mTabIndicators = new ArrayList<>(); @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_wechat6); setoverflowbuttonAlways(); getActionbar().setdisplayShowHomeEnabled(false); initVIEw(); initDatas(); initEvents(); vIEwPager.setAdapter(adapter); } //初始化所有事件 private voID initEvents() { vIEwPager.addOnPagechangelistener(this); } //初始化所有数据 private voID initDatas() { for(String mTitle:mTitles){ TabFragment tabFragment = new TabFragment(); Bundle bundle = new Bundle(); bundle.putString(TabFragment.Title,mTitle); tabFragment.setArguments(bundle); mTabs.add(tabFragment); } adapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @OverrIDe public androID.support.v4.app.Fragment getItem(int position) { return mTabs.get(position); } @OverrIDe public int getCount() { return mTabs.size(); } }; } //初始化所有vIEw private voID initVIEw() { vIEwPager = (VIEwPager)findVIEwByID(R.ID.ID_vIEwpager); ChangecolorIconWithText one = (ChangecolorIconWithText)findVIEwByID(R.ID.ID_indicator_one); ChangecolorIconWithText two = (ChangecolorIconWithText)findVIEwByID(R.ID.ID_indicator_two); ChangecolorIconWithText three = (ChangecolorIconWithText)findVIEwByID(R.ID.ID_indicator_three); ChangecolorIconWithText four = (ChangecolorIconWithText)findVIEwByID(R.ID.ID_indicator_four); mTabIndicators.add(one); mTabIndicators.add(two); mTabIndicators.add(three); mTabIndicators.add(four); one.setonClickListener(this); two.setonClickListener(this); three.setonClickListener(this); four.setonClickListener(this); one.setIconAlpha(1.0f); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); return true; } //应用反射改变Overflowbutton的图标 private voID setoverflowbuttonAlways(){ try { VIEwConfiguration config = VIEwConfiguration.get(this); FIEld menuKey = VIEwConfiguration.class.getDeclaredFIEld("sHasPermanentMenuKey"); menuKey.setAccessible(true); menuKey.setBoolean(config,false); } catch (Exception e) { e.printstacktrace(); } } //设置menu显示icon @OverrIDe public boolean onMenuOpened(int featureID,Menu menu) { if(featureID== Window.FEATURE_ACTION_bar&&menu!=null){ if(menu.getClass().getSimplename().equals("MenuBuilder")){ try { Method method = menu.getClass().getDeclaredMethod("setoptionaliconsVisible",Boolean.TYPE); method.setAccessible(true); method.invoke(menu,true); } catch (Exception e) { e.printstacktrace(); } } } return super.onMenuOpened(featureID,menu); } @OverrIDe public voID onClick(VIEw v) { resetOtherTabs(); switch (v.getID()){ case R.ID.ID_indicator_one: mTabIndicators.get(0).setIconAlpha(1.0f); vIEwPager.setCurrentItem(0,false); break; case R.ID.ID_indicator_two: mTabIndicators.get(1).setIconAlpha(1.0f); vIEwPager.setCurrentItem(1,false); break; case R .ID.ID_indicator_three: mTabIndicators.get(2).setIconAlpha(1.0f); vIEwPager.setCurrentItem(2,false); break; case R.ID.ID_indicator_four: mTabIndicators.get(3).setIconAlpha(1.0f); vIEwPager.setCurrentItem(3,false); break; } } private voID resetOtherTabs() { for(int i=0;i<mTabIndicators.size();i++){ mTabIndicators.get(i).setIconAlpha(0); } } @OverrIDe public voID onPageScrolled(int position,float positionOffset,int positionOffsetPixels) { if(positionOffset>0){ ChangecolorIconWithText left = mTabIndicators.get(position); ChangecolorIconWithText right = mTabIndicators.get(position+1); left.setIconAlpha(1-positionOffset); right.setIconAlpha(positionOffset); } } @OverrIDe public voID onPageSelected(int position) { } @OverrIDe public voID onPageScrollStateChanged(int state) { } }
ChangecolorIconWithText.java代码:
package vIEwhelper;import androID.content.Context;import androID.content.res.TypedArray;import androID.graphics.Bitmap;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;import siso.geekworld.R;public class ChangecolorIconWithText extends VIEw { private int mcolor = 0xFF45C01A; private String mText = "微信"; private Bitmap mIconBitmap; private int mTextSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,12,getResources().getdisplayMetrics()); private Canvas mCanvas; private Bitmap mBitmap; private Paint mPaint; //透明度0.0~1.0 private float mAlpha ; private Rect mIconRect; private Rect mTextBound; private Paint mTextPaint; private static final String INSTANCE_STATUS = "instance_status"; private static final String INSTANCE_Alpha = "instance_Alpha"; public ChangecolorIconWithText(Context context) { this(context,null); } public ChangecolorIconWithText(Context context,AttributeSet attrs) { this(context,attrs,0); } /** * 获取自定义属性的值 * @param context * @param attrs * @param defStyleAttr */ public ChangecolorIconWithText(Context context,AttributeSet attrs,int defStyleAttr) { super(context,defStyleAttr); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.ChangecolorIconWithText); int n = a.getIndexCount(); for(int i=0;i<n;i++){ int attr = a.getIndex(i); switch (attr){ case R.styleable.ChangecolorIconWithText_micon: BitmapDrawable drawable =(BitmapDrawable)a.getDrawable(attr); mIconBitmap = drawable.getBitmap(); break; case R.styleable.ChangecolorIconWithText_mcolor: mcolor = a.getcolor(attr,0xFF45C01A); break; case R.styleable.ChangecolorIconWithText_text: mText = a.getString(attr); break; case R.styleable.ChangecolorIconWithText_text_size: mTextSize = (int)a.getDimension(attr,TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,getResources().getdisplayMetrics())); break; } } a.recycle(); mTextBound = new Rect(); mTextPaint = new Paint(); mTextPaint.setTextSize(mTextSize); mTextPaint.setcolor(0Xff555555); mTextPaint.getTextBounds(mText,mText.length(),mTextBound); } @OverrIDe protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) { super.onMeasure(wIDthMeasureSpec,heightmeasureSpec); int iconWIDth = Math.min(getMeasureDWIDth() - getpaddingleft() - getpaddingRight(),getMeasuredHeight() - getpaddingtop() - getpaddingBottom() - mTextBound.height()); int left = getMeasureDWIDth()/2 - iconWIDth/2; int top = getMeasuredHeight()/2-(mTextBound.height()+iconWIDth)/2; mIconRect = new Rect(left,top,left+iconWIDth,top+iconWIDth); } @OverrIDe protected voID onDraw(Canvas canvas) { canvas.drawBitmap(mIconBitmap,null,mIconRect,null); int Alpha = (int)Math.ceil(255*mAlpha); //内存准备Bitmap,setAlpha,纯色,xfermode,图标 setUpTargetBitmap(Alpha); //1.绘制原文本 2.绘制变色的文本 drawSourceText(canvas,Alpha); drawTargetText(canvas,Alpha); canvas.drawBitmap(mBitmap,null); } //绘制变色的文本 private voID drawTargetText(Canvas canvas,int Alpha) { mTextPaint.setcolor(mcolor); mTextPaint.setAlpha(Alpha); int x = mIconRect.left+mIconRect.wIDth()/2-mTextBound.wIDth()/2; int y = mIconRect.bottom+mTextBound.height(); canvas.drawText(mText,x,y,mTextPaint); } //绘制原文本 private voID drawSourceText(Canvas canvas,int Alpha) { mTextPaint.setcolor(0xff333333); mTextPaint.setAlpha(255-Alpha); int x = mIconRect.left+mIconRect.wIDth()/2-mTextBound.wIDth()/2; int y = mIconRect.bottom+mTextBound.height(); canvas.drawText(mText,mTextPaint); } //在内存中绘制可变色的Icon 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,mPaint); } public voID setIconAlpha(float Alpha){ this.mAlpha = Alpha; //重绘 invalIDateVIEw(); } private voID invalIDateVIEw(){ if(Looper.getMainLooper()==Looper.myLooper()){ //是UI线程 invalIDate(); }else{ postInvalIDate(); } } @OverrIDe protected Parcelable onSaveInstanceState() { Bundle bundle = new Bundle(); bundle.putParcelable(INSTANCE_STATUS,super.onSaveInstanceState()); bundle.putfloat(INSTANCE_Alpha,mAlpha); return bundle; } @OverrIDe protected voID onRestoreInstanceState(Parcelable state) { if(state instanceof Bundle){ Bundle bundle = (Bundle)state; mAlpha = bundle.getfloat(INSTANCE_Alpha); super.onRestoreInstanceState(bundle.getParcelable(INSTANCE_STATUS)); }else{ super.onRestoreInstanceState(state); } }}
TabFragment.java代码:
package vIEwhelper;import androID.graphics.color;import androID.os.Bundle;import androID.vIEw.Gravity;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.TextVIEw;public class TabFragment extends androID.support.v4.app.Fragment { private String mTitle = "DEFAulT"; public static final String Title = "Title"; @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { if(getArguments()!=null){ mTitle = getArguments().getString(Title); } TextVIEw tv = new TextVIEw(getActivity()); tv.setText(mTitle); tv.setTextSize(20); tv.setGravity(Gravity.CENTER); tv.setBackgroundcolor(color.parsecolor("#ffffffff")); return tv; }}
activity_wechat6.xml内容:
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:hymen="http://schemas.androID.com/apk/res-auto" androID:orIEntation="vertical" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <androID.support.v4.vIEw.VIEwPager androID:ID="@+ID/ID_vIEwpager" androID:layout_wIDth="match_parent" androID:layout_height="0dp" androID:layout_weight="1"> </androID.support.v4.vIEw.VIEwPager> <linearLayout androID:orIEntation="horizontal" androID:background="@drawable/tab_bg" androID:layout_wIDth="match_parent" androID:layout_height="60dp"> <vIEwhelper.ChangecolorIconWithText androID:ID="@+ID/ID_indicator_one" androID:layout_wIDth="0dp" androID:layout_height="match_parent" androID:layout_weight="1" androID:padding="5dp" hymen:micon="@drawable/ic_menu_start_conversation" hymen:mcolor="#ff45c01a" hymen:text_size="12sp" hymen:text="@string/app_name" /> <vIEwhelper.ChangecolorIconWithText androID:ID="@+ID/ID_indicator_two" androID:layout_wIDth="0dp" androID:layout_height="match_parent" androID:layout_weight="1" androID:padding="5dp" hymen:micon="@drawable/ic_menu_frIEndsList" hymen:mcolor="#ff45c01a" hymen:text_size="12sp" hymen:text="@string/tab_contact" /> <vIEwhelper.ChangecolorIconWithText androID:ID="@+ID/ID_indicator_three" androID:layout_wIDth="0dp" androID:layout_height="match_parent" androID:layout_weight="1" androID:padding="5dp" hymen:mcolor="#ff45c01a" hymen:micon="@drawable/ic_menu_emoticons" hymen:text="@string/tab_found" hymen:text_size="12sp" /> <vIEwhelper.ChangecolorIconWithText androID:ID="@+ID/ID_indicator_four" androID:layout_wIDth="0dp" androID:layout_height="match_parent" androID:layout_weight="1" androID:padding="5dp" hymen:mcolor="#ff45c01a" hymen:micon="@drawable/ic_menu_allfrIEnds" hymen:text="@string/tab_me" hymen:text_size="12sp" /> </linearLayout></linearLayout>
strings.xml内容:
<resources> <string name="app_name">微信</string> <string name="action_search">查找</string> <string name="action_add">添加</string> <string name="menu_group_chat">发起群聊</string> <string name="menu_Feedback">意见反馈</string> <string name="menu_addfrIEnd">添加朋友</string> <string name="menu_scan">扫一扫</string> <string name="tab_contact">通讯录</string> <string name="tab_found">发现</string> <string name="tab_me">我</string></resources>
main.xml内容 :
<?xml version="1.0" enCoding="utf-8"?><menu xmlns:androID="http://schemas.androID.com/apk/res/androID" > <item androID:ID="@+ID/action_search" androID:icon="@drawable/actionbar_search_icon" androID:actionVIEwClass="androID.Widget.SearchVIEw" androID:showAsAction="ifRoom|collapseActionVIEw" androID:title="@string/action_search"/> <item androID:ID="@+ID/action_group_chat" androID:icon="@drawable/menu_group_chat_icon" androID:title="@string/menu_group_chat"/> <item androID:ID="@+ID/action_add_frIEnd" androID:icon="@drawable/menu_add_icon" androID:title="@string/menu_addfrIEnd"/> <item androID:ID="@+ID/action_scan" androID:icon="@drawable/men_scan_icon" androID:title="@string/menu_scan"/> <item androID:ID="@+ID/action_Feedback" androID:icon="@drawable/menu_Feedback_icon" androID:title="@string/menu_Feedback"/></menu>
styles.xml内容:
<resources> <!-- Base application theme. --> <style name="AppBasetheme" parent="theme.AppCompat.light"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="androID:actionOverflowbuttonStyle">@style/WeiXinOverflowbuttonStyle</item> </style> <style name="WeiXinOverflowbuttonStyle"> <item name="androID:src">@drawable/actionbar_add_icon</item> </style> <!-- Application theme. --> <style name="Apptheme" parent="androID:theme.Holo.light.DarkActionbar"> <!-- <style name="Apptheme" parent="AppBasetheme">--> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style></resources>
drawable资源:
运行结果如图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android学习教程之高仿安卓微信6.0(2)全部内容,希望文章能够帮你解决Android学习教程之高仿安卓微信6.0(2)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)