Android学习教程之高仿安卓微信6.0(2)

Android学习教程之高仿安卓微信6.0(2),第1张

概述本文实例为大家分享了Android仿安卓微信6.0的具体代码,供大家参考,具体内容如下

本文实例为大家分享了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)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存