android viewpage的使用在使用之前要加support.v4包哦,一般在D:\android-sdk-windows\extras\android\support\v4目录下面,好像4.0以后见工程的时候自动加载的......下面贴代码及效果图:mainactivity类代码如下:package com.xy.viewpager;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.Button;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.graphics.BitmapFactory;public class MainActivity extends Activity {private ViewPager mPager;// 页卡内容private List<View> listViews; // Tab页面列表private ImageView cursor;// 动画图片private TextView t1, t2, t3;// 页卡头标private int offset = 0;// 动画图片偏移量private int currIndex = 0;// 当前页卡编号private int bmpW;// 动画图片宽度MyPagerAdapter adapter;LayoutInflater mInflater;RelativeLayout rel;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i("Viewpage", "--onCreate--");initImageView();initTextView();initPageView();}private void initPageView() {mInflater = getLayoutInflater();listViews = new ArrayList<View>();listViews.add(mInflater.inflate(R.layout.layou1, null));listViews.add(mInflater.inflate(R.layout.layou2, null));listViews.add(mInflater.inflate(R.layout.layou3, null));adapter = new MyPagerAdapter(listViews);mPager = (ViewPager) findViewById(R.id.page);mPager.setAdapter(adapter);mPager.setCurrentItem(0);mPager.setOnPageChangeListener(new MyOnPageChangeListener());}private void initTextView() {t1 = (TextView) findViewById(R.id.tab1);t2 = (TextView) findViewById(R.id.tab2);t3 = (TextView) findViewById(R.id.tab3);t1.setOnClickListener(new MyOnClickListener(0));t2.setOnClickListener(new MyOnClickListener(1));t3.setOnClickListener(new MyOnClickListener(2));}private void initImageView() {cursor = (ImageView) findViewById(R.id.cursor);rel = (RelativeLayout) findViewById(R.id.layout);bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.png).getWidth();DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;offset = (screenW / 3 - bmpW) / 2;// Matrix matrix = new Matrix();// matrix.postTranslate(offset, 0);cursor.setBackgroundResource(R.drawable.png);// cursor.setScaleType(ScaleType.MATRIX);// cursor.setImageMatrix(matrix);rel.setPadding(offset, 0, 0, 0);}public class MyOnClickListener implements View.OnClickListener {private int index = 0;public MyOnClickListener(int i) {index = i;}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmPager.setCurrentItem(index);}}public class MyPagerAdapter extends PagerAdapter implements OnClickListener {public List<View> mListViews;public View v1;public View v2;public View v3;public Button mButton;public MyPagerAdapter(List<View> mListViews) {this.mListViews = mListViews;getViewClickListener(mListViews);}public void getViewClickListener(List<View> listview) {v1 = listview.get(0);v2 = listview.get(1);v3 = listview.get(2);mButton = (Button) v1.findViewById(R.id.button);mButton.setOnClickListener(this);}public void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView(mListViews.get(arg1));}public void finishUpdate(View arg0) {}@Overridepublic int getCount() {return mListViews.size();}@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(mListViews.get(arg1), 0);return mListViews.get(arg1);}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == (arg1);}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}@Overridepublic void onClick(View v) {AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setIcon(null).setTitle("dialog").setMessage("nihao").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0,int arg1) {MainActivity.this.finish();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0,int arg1) {}}).create();// 显示对话框也可以使用showDialog(int id)方法显示对话框dialog.show();}}public class MyOnPageChangeListener implements OnPageChangeListener {int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量@Overridepublic void onPageSelected(int arg0) {Animation animation = null;switch (arg0) {case 0:if (currIndex == 1) {animation = new TranslateAnimation(one, 0, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, 0, 0, 0);}break;case 1:if (currIndex == 0) {animation = new TranslateAnimation(offset, one, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, one, 0, 0);}break;case 2:if (currIndex == 0) {animation = new TranslateAnimation(offset, two, 0, 0);} else if (currIndex == 1) {animation = new TranslateAnimation(one, two, 0, 0);}break;}currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);rel.startAnimation(animation);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}}}mainlayout.xml:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:id="@+id/nav"        android:layout_width="fill_parent"        android:layout_height="50dp"        android:background="#efefef" >        <TextView            android:id="@+id/tab1"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_weight="1.0"            android:gravity="center"            android:text="页片1"            android:textColor="#000000" />        <TextView            android:id="@+id/tab2"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_weight="1.0"            android:gravity="center"            android:text="页片2"            android:textColor="#000000" />        <TextView            android:id="@+id/tab3"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_weight="1.0"            android:gravity="center"            android:text="页片3"            android:textColor="#000000" />    </LinearLayout>    <RelativeLayout        android:id="@+id/layout"        android:layout_width="wrap_content"        android:layout_height="wrap_content" >        <ImageView            android:id="@+id/cursor"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />    </RelativeLayout>    <android.support.v4.view.ViewPager        android:id="@+id/page"        android:layout_width="fill_parent"        android:layout_height="fill_parent" >    </android.support.v4.view.ViewPager></LinearLayout>layout1.xml:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#565656"android:orientation="vertical" >    <Button        android:id="@+id/button"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="点击事件" /></LinearLayout>layout2.xml:<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical"      android:background="#abab00">  </LinearLayout>  layout3.xml:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#00abcd"    android:orientation="vertical" ></LinearLayout>
  
四个选项卡及加载数据,代码片段
package com.cy.contact.activity;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Stack;import org.json.JSONObject;import org.json.JSONStringer;import org.json.JSONTokener;import android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.IntentFilter;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.Matrix;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.text.Editable;import android.text.Spannable;import android.text.SpannableStringBuilder;import android.text.TextWatcher;import android.text.style.ForegroundColorSpan;import android.util.DisplayMetrics;import android.view.ContextMenu;import android.view.LayoutInflater;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.ContextMenu.ContextMenuInfo;import android.view.View.OnClickListener;import android.view.View.OnCreateContextMenuListener;import android.view.View.OnTouchListener;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import com.cy.contact.activity.tool.DialAdapter;import com.cy.contact.dao.NativeCallDao;import com.cy.contact.dao.UserDao;import com.cy.contact.pojo.NativeUser;import com.cy.contact.pojo.User;import com.cy.contact.pojo.UserContent;import com.cy.contact.usercontent.action.ActionCode;import com.cy.contact.util.SpellUtils;import com.j256.ormlite.dao.ForeignCollection;/** * 警务通讯录   拨号界面 * @author yutao * */public class DialActivity extends ToolBarActivity implements OnClickListener{//数字功能键private RelativeLayout dialLayout;private Button num0Btn,num1Btn,num2Btn,num3Btn,num4Btn,num5Btn,num6Btn,num7Btn,num8Btn,num9Btn,numStarBtn,numPoundBtn,allRecordBtn,noCallBtn;private Button delNumBtn;private TextView inputBtn;//private ListView callLogListView;private ListView dialAllList;private ListView dialAlreadyList;private ListView dialOutList;private ListView dialMissList;private DialAdapter dialAllAdapter;private DialAdapter dialAlreadyAdapter; private DialAdapter dialMissAdapter; private DialAdapter dialOutAdapter; private ListView contactListView;       //显示搜索联系人private int currentPosition=-1;         //记录通话记录点击的位置private int searchCurrentPosition=-1;   //记录T9键盘搜索联系人点击位置private SearchContactAdapter searchAdapter;//显示联系人适配器//private CallLogAdapter callLogAdapter;      //通话记录数据适配器private List<NativeUser> allRecordslist = new ArrayList<NativeUser>();private List<NativeUser> missCallsList=new ArrayList<NativeUser>();private List<NativeUser> outCallsList=new ArrayList<NativeUser>();private List<NativeUser> listRecords=new ArrayList<NativeUser>();Stack<String> myStack=new Stack<String>();private static final String DAILNUMBER="dail";private String keyWord=null;           //当前搜索关键字private NativeCallDao nadao =null;private UserDao udao=null;private int  callStatusFlag=0;      //为true时表示显示全部通话记录状态,false时显示未接电话private int DIALDETAIL = 1;    //通话记录返回状态private int delType  = 0;    //设置需要删除通话记录的类别private RelativeLayout searchLayout;      //搜索界面布局                  默认为invisiableprivate LinearLayout searchBtnlayout;     //搜索界面下按钮布局private Button newContactBtn,saveToHaveBtn,sendMsgBtn;   //新建联系人,  保存到已有,发送短信private List<User> searchListUser=new ArrayList<User>();  //搜索联系人数据//viewPager用到变量    private RelativeLayout dialPage;//viewpager和选项卡  的界面    private RelativeLayout dialImageLay;private ViewPager mPager;// ViewPager内容private List<View> listViews; // Tab页面列表private ImageView cursor;// 动画图片private TextView t1, t2, t3,t4;// 页卡头标private int offset = 0;// 动画图片偏移量private int currIndex = 0;// 当前页卡编号private int bmpW;// 动画图片宽度DialPagerAdapter adapter;LayoutInflater mInflater;private Handler handler =new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 1:initData();break;case 2:initData();break;case 3:initData();break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dial_layout);nadao = NativeCallDao.getInstance(this);udao=UserDao.getInstance(this);initView();initData();//registerCllBroadCast(); initImageView(); initTextView(); initPageView();} private void initPageView() {mInflater = getLayoutInflater();listViews = new ArrayList<View>();listViews.add(mInflater.inflate(R.layout.dial_all_layout, null));listViews.add(mInflater.inflate(R.layout.dial_miss_layout, null));listViews.add(mInflater.inflate(R.layout.dial_out_layout, null));listViews.add(mInflater.inflate(R.layout.dial_already_layout, null));adapter = new DialPagerAdapter(listViews);mPager = (ViewPager) findViewById(R.id.page); mPager.setAdapter(adapter);mPager.setCurrentItem(0);mPager.setOnPageChangeListener(new DialOnPageChangeListener());}private void initTextView() {t1 = (TextView) findViewById(R.id.tab1);t2 = (TextView) findViewById(R.id.tab2);t3 = (TextView) findViewById(R.id.tab3);t4 = (TextView) findViewById(R.id.tab4);t1.setOnClickListener(new MyOnClickListener(0));t2.setOnClickListener(new MyOnClickListener(1));t3.setOnClickListener(new MyOnClickListener(2));t4.setOnClickListener(new MyOnClickListener(3));}private void initImageView() {cursor = (ImageView) findViewById(R.id.cursor);dialImageLay = (RelativeLayout) findViewById(R.id.dialImageLay);bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.ok).getWidth();DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;offset = (screenW / 4 - bmpW) / 2;cursor.setBackgroundResource(R.drawable.ok);dialImageLay.setPadding(offset, 0, 0, 0);}public class MyOnClickListener implements View.OnClickListener {private int index = 0;public MyOnClickListener(int i) {index = i;}public void onClick(View v) {// TODO Auto-generated method stubmPager.setCurrentItem(index);}}/** * 刷新数据 *//*public void initData(){handler.postDelayed(new Runnable(){public void run() {allRecordslist=app.dbService.getListCall();missCallsList=app.dbService.getMissCallsList();}}, 100);}*/public void initData(){new Runnable(){public void run() {allRecordslist.clear();missCallsList.clear();outCallsList.clear();List<NativeUser> la = app.dbService.getListCall();List<NativeUser> lm = app.dbService.getMissCallsList();List<NativeUser> lo = app.dbService.getOutCallsList();allRecordslist.addAll(la);missCallsList.addAll(lm);outCallsList.addAll(lo);System.out.println("outCallsList  "+outCallsList.size());System.out.println("lo  "+lo.size());}}.run();}public void registerCllBroadCast(){IntentFilter callFilter = new IntentFilter();callFilter.addAction(app.UPDATE_CALL);registerReceiver(callBrodcastResever, callFilter);}private BroadcastReceiver callBrodcastResever = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if(action == app.UPDATE_CALL){app.dbService.initOrRefreshCallRecord();app.dbService.initOrRefreshMissCall();app.dbService.initOrRefreshOutCall();initData();}}};/** * 显示拨号键盘 */public void showDialLayout(){if(dialLayout.getVisibility()==View.VISIBLE){dialLayout.setVisibility(View.INVISIBLE);}else{dialLayout.setVisibility(View.VISIBLE);}}/** * 通话记录数据适配器 * @author yutao * *//*class CallLogAdapter extends BaseAdapter{private Context context;public CallLogAdapter(Context context){this.context = context;}public int getCount() {return listRecords.size();}public Object getItem(int position) {return listRecords.get(position);}public long getItemId(int position) {return position;}class ItemView{public  ImageView seeImageView;public ImageView callImageView;public TextView  numberText; public TextView  nameText;public TextView timesText;public TextView dateText;public LinearLayout callPhone;public LinearLayout message;public LinearLayout dailMail;public LinearLayout callrecord;public LinearLayout callLogHide;}HashMap<Integer,View> lamp =new  HashMap<Integer,View>();public View getView(int position, View convertView, ViewGroup parent) {View view;ItemView itemView = null;if(lamp.get(position) == null){convertView  = LayoutInflater.from(context).inflate(R.layout.list_calllog, null);itemView = new ItemView();itemView.seeImageView = (ImageView)convertView.findViewById(R.id.incallLogImage);itemView.callImageView = (ImageView)convertView.findViewById(R.id.shortcut_phone);itemView.numberText = (TextView)convertView.findViewById(R.id.callLognumber);itemView.nameText = (TextView)convertView.findViewById(R.id.callLogName);itemView.timesText = (TextView)convertView.findViewById(R.id.callLogTimes);itemView.dateText = (TextView)convertView.findViewById(R.id.callLogdate);itemView.callPhone = (LinearLayout)convertView.findViewById(R.id.callPhonelayout);itemView.message = (LinearLayout)convertView.findViewById(R.id.smsMessage);itemView.dailMail = (LinearLayout)convertView.findViewById(R.id.dail_email);itemView.callrecord  = (LinearLayout)convertView.findViewById(R.id.callrecord);itemView.callLogHide=(LinearLayout)convertView.findViewById(R.id.callLogHide);convertView.setTag(itemView);}else{view = lamp.get(position);itemView = (ItemView)view.getTag();}  final NativeUser user = listRecords.get(position);  if(user.getType()==3){  if(user.getUserName() ==null){  itemView.nameText.setTextColor(getResources().getColor(R.color.miss_dial_color));  itemView.nameText.setText("未知");  }else{  itemView.nameText.setText(user.getUserName());  itemView.nameText.setTextColor(getResources().getColor(R.color.miss_dial_color));  }itemView.numberText.setText(user.getPhoneNumber());itemView.dateText.setText(user.getCtreatTime());itemView.timesText.setText("("+user.getCount()+")"); itemView.numberText.setTextColor(getResources().getColor(R.color.miss_dial_color)); itemView.dateText.setTextColor(getResources().getColor(R.color.miss_dial_color)); itemView.timesText.setTextColor(getResources().getColor(R.color.miss_dial_color));   }else{  if(user.getUserName() ==null){  itemView.nameText.setText("未知");  }else{  itemView.nameText.setText(user.getUserName());  }itemView.numberText.setText(user.getPhoneNumber());itemView.dateText.setText(user.getCtreatTime());itemView.timesText.setText("("+user.getCount()+")");   } if(currentPosition==-1){itemView.callLogHide.setVisibility(View.GONE);itemView.callImageView.setVisibility(View.VISIBLE);}else if(position==currentPosition){itemView.callLogHide.setVisibility(View.VISIBLE);itemView.callImageView.setVisibility(View.GONE);}else{itemView.callLogHide.setVisibility(View.GONE);itemView.callImageView.setVisibility(View.VISIBLE);}//image 打电话事件itemView.callImageView.setOnClickListener(new OnClickListener() {public void onClick(View v) {String number = user.getPhoneNumber();if(! number.equals("")){try{Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));startActivity(intent);}catch(Exception e){e.printStackTrace();}}}});//layout 打电话事件itemView.callPhone.setOnClickListener(new OnClickListener() {public void onClick(View v) {String number = user.getPhoneNumber();if(! number.equals("")){try{Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));startActivity(intent);}catch(Exception e){e.printStackTrace();}}}});//发送短信事件itemView.message.setOnClickListener(new OnClickListener() {String number = user.getPhoneNumber();public void onClick(View v) {Intent intent = new Intent(DialActivity.this,SmsDetialActivity.class);intent.putExtra("number", number);intent.putExtra("DAILNUMBER", DAILNUMBER);startActivity(intent);}});//通话记录详情itemView.callrecord.setOnClickListener(new OnClickListener() {String number = user.getPhoneNumber();public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("number", number); intent.putExtra("name", user.getUserName()); intent.setClass(DialActivity.this, DialRecordListAcitvity.class); startActivityForResult(intent, DIALDETAIL);}});return convertView;}}*/public void initView(){dialLayout=(RelativeLayout)findViewById(R.id.dialLayout);num0Btn=(Button)findViewById(R.id.num0Btn);num0Btn.setOnClickListener(this);num1Btn=(Button)findViewById(R.id.num1Btn);num1Btn.setOnClickListener(this);num2Btn=(Button)findViewById(R.id.num2Btn);num2Btn.setOnClickListener(this);num3Btn=(Button)findViewById(R.id.num3Btn);num3Btn.setOnClickListener(this);num4Btn=(Button)findViewById(R.id.num4Btn);num4Btn.setOnClickListener(this);num5Btn=(Button)findViewById(R.id.num5Btn);num5Btn.setOnClickListener(this);num6Btn=(Button)findViewById(R.id.num6Btn);num6Btn.setOnClickListener(this);num7Btn=(Button)findViewById(R.id.num7Btn);num7Btn.setOnClickListener(this);num8Btn=(Button)findViewById(R.id.num8Btn);num8Btn.setOnClickListener(this);num9Btn=(Button)findViewById(R.id.num9Btn);num9Btn.setOnClickListener(this);numStarBtn=(Button)findViewById(R.id.numStarBtn);numStarBtn.setOnClickListener(this);numPoundBtn=(Button)findViewById(R.id.numPoundBtn);numPoundBtn.setOnClickListener(this);inputBtn=(TextView)findViewById(R.id.inputBtn);inputBtn.setOnClickListener(this);inputBtn.addTextChangedListener(new TextWatcher(){public void afterTextChanged(Editable s) {}public void beforeTextChanged(CharSequence s, int start, int count,int after) {}public void onTextChanged(CharSequence s, int start, int before,int count) {keyWord=s.toString();if(keyWord.equals("")){   //拨号盘没有内容时,隐藏联系人ListViewsearchLayout.setVisibility(View.INVISIBLE);main.hideDialLayout();}else{callStatusFlag=3;handler.postDelayed(new Runnable(){public void run() {searchByKeyword(keyWord);}},10);main.showDialLayout();if(searchLayout.getVisibility()==View.INVISIBLE){searchLayout.setVisibility(View.VISIBLE);}}}});delNumBtn=(Button)findViewById(R.id.delNumBtn);delNumBtn.setOnClickListener(this);allRecordBtn=(Button)findViewById(R.id.dial_allrecord_btn);allRecordBtn.setOnClickListener(new MyOnClickListener(0));noCallBtn = (Button)findViewById(R.id.dial_norecord_btn);noCallBtn.setOnClickListener(new MyOnClickListener(1));dialPage = (RelativeLayout)findViewById(R.id.dialPage);   //通话记录listView     /*  callLogListView = (ListView)findViewById(R.id.phoneRecordView);//       callLogAdapter = new CallLogAdapter(this);   callLogListView.setAdapter(callLogAdapter);*///点击隐藏键盘   dialPage.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {if(dialLayout.isShown()){dialLayout.setVisibility(View.INVISIBLE);}return false;}});/*//单击按钮用来隐藏listViewITem 项callLogListView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {if( position != currentPosition ){currentPosition = position;}else{currentPosition = -1;}callLogAdapter.notifyDataSetChanged();}});      //长按callLogListView.setOnItemLongClickListener(new OnItemLongClickListener() {public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {return false;}});*/   searchLayout=(RelativeLayout) findViewById(R.id.searchLayout);//搜索联系人   searchBtnlayout=(LinearLayout) findViewById(R.id.searchBtnlayout);      newContactBtn=(Button) findViewById(R.id.newContachBtn);   newContactBtn.setOnClickListener(this);   saveToHaveBtn=(Button) findViewById(R.id.saveToHaveBtn);   saveToHaveBtn.setOnClickListener(this);   sendMsgBtn=(Button) findViewById(R.id.sendMsgBtn);   sendMsgBtn.setOnClickListener(this);   //搜索显示联系人   contactListView=(ListView)findViewById(R.id.contactListView);   searchAdapter=new SearchContactAdapter(this);   contactListView.setAdapter(searchAdapter);      contactListView.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {if(dialLayout.isShown()){dialLayout.setVisibility(View.INVISIBLE);}return false;}});      //取得搜索Position   contactListView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {if(position != searchCurrentPosition){searchCurrentPosition = position;}else{searchCurrentPosition = -1;}searchAdapter.notifyDataSetChanged();}});      }@Overridepublic boolean onContextItemSelected(MenuItem item) {AdapterView.AdapterContextMenuInfo menuInfo;menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();int position = menuInfo.position;System.out.println("delType  :"+delType);if(delType ==1){final NativeUser user = allRecordslist.get(position);switch(item.getItemId()){case 0:     //删除通话记录handler.post(new Runnable(){public void run(){allRecordslist.clear();nadao.delCallRecord(user.getPhoneNumber());app.dbService.initOrRefreshCallRecord();app.dbService.initOrRefreshMissCall();app.dbService.initOrRefreshOutCall();initData();//allRecordslist=app.dbService.getListCall();dialAllAdapter.notifyDataSetChanged();adapter.notifyDataSetChanged();}});break;case 1:final EditText ed = new EditText(this);ed.setText(user.getPhoneNumber());new AlertDialog.Builder(this).setTitle("编辑号码").setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {String number = ed.getText().toString();if(! number.equals("")){Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));startActivity(intent);}}}).setNegativeButton("取消", null).show();break;}}else if(delType == 2){final NativeUser user = missCallsList.get(position);switch(item.getItemId()){case 0:     //删除通话记录handler.post(new Runnable(){public void run(){missCallsList.clear();nadao.delCallRecord(user.getPhoneNumber());app.dbService.initOrRefreshCallRecord();app.dbService.initOrRefreshMissCall();app.dbService.initOrRefreshOutCall();initData();//missCallsList=app.dbService.getMissCallsList();dialMissAdapter.notifyDataSetChanged();adapter.notifyDataSetChanged();}});break;case 1:final EditText ed = new EditText(this);ed.setText(user.getPhoneNumber());new AlertDialog.Builder(this).setTitle("编辑号码").setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {String number = ed.getText().toString();if(! number.equals("")){Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));startActivity(intent);}}}).setNegativeButton("取消", null).show();break;}}else if(delType == 3){final NativeUser user = outCallsList.get(position);switch(item.getItemId()){case 0:     //删除通话记录handler.post(new Runnable(){public void run(){outCallsList.clear();nadao.delCallRecord(user.getPhoneNumber());app.dbService.initOrRefreshCallRecord();app.dbService.initOrRefreshMissCall();app.dbService.initOrRefreshOutCall();initData();//missCallsList=app.dbService.getMissCallsList();dialOutAdapter.notifyDataSetChanged();adapter.notifyDataSetChanged();}});break;case 1:final EditText ed = new EditText(this);ed.setText(user.getPhoneNumber());new AlertDialog.Builder(this).setTitle("编辑号码").setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {String number = ed.getText().toString();if(! number.equals("")){Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));startActivity(intent);}}}).setNegativeButton("取消", null).show();break;}}return super.onContextItemSelected(item);}/** * 根据关键字搜索 * @param keyWord */public void searchByKeyword(String keyWord){if(keyWord!=null){if(!keyWord.equals("")){if(searchLayout.getVisibility()==View.INVISIBLE||searchLayout.getVisibility()==View.GONE){dialPage.setVisibility(View.INVISIBLE);searchLayout.setVisibility(View.VISIBLE);}searchListUser.clear();searchListUser=udao.getListUserByT9Num(keyWord);if(searchListUser.size()==0){searchBtnlayout.setVisibility(View.VISIBLE);}else{searchBtnlayout.setVisibility(View.GONE);searchAdapter.notifyDataSetChanged();}}else{searchLayout.setVisibility(View.INVISIBLE);if(dialPage.getVisibility()==View.INVISIBLE){dialPage.setVisibility(View.VISIBLE);searchLayout.setVisibility(View.INVISIBLE);}}}}public void onClick(View v) {switch(v.getId()){case R.id.num0Btn:myStack.add("0");break;case R.id.num1Btn:myStack.add("1");break;case R.id.num2Btn:myStack.add("2");break;case R.id.num3Btn:myStack.add("3");break;case R.id.num4Btn:myStack.add("4");break;case R.id.num5Btn:myStack.add("5");break;case R.id.num6Btn:myStack.add("6");break;case R.id.num7Btn:myStack.add("7");break;case R.id.num8Btn:myStack.add("8");break;case R.id.num9Btn:myStack.add("9");break;case R.id.numStarBtn:myStack.add("*");break;case R.id.numPoundBtn:myStack.add("#");break;case R.id.delNumBtn:if(!myStack.isEmpty()){myStack.pop();}break;case R.id.inputBtn: String phoneNumber=getStackText(); if(!phoneNumber.equals("")){ try{ Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phoneNumber)); startActivity(intent); }catch(Exception e){ e.printStackTrace(); } }break;/*case R.id.dial_allrecord_btn:  //全部电话记录if(searchLayout.getVisibility()==View.VISIBLE){searchLayout.setVisibility(View.INVISIBLE);}if(callLogListView.getVisibility()==View.INVISIBLE){callLogListView.setVisibility(View.VISIBLE);}if(callStatusFlag==0){return;}callStatusFlag=0;listRecords.clear();listRecords.addAll(allRecordslist);callLogAdapter.notifyDataSetChanged();break;case R.id.dial_norecord_btn:     //未接电话if(searchLayout.getVisibility()==View.VISIBLE){searchLayout.setVisibility(View.INVISIBLE);}if(callLogListView.getVisibility()==View.INVISIBLE){callLogListView.setVisibility(View.VISIBLE);}if(callStatusFlag==1){return;}callStatusFlag=1;listRecords.clear();listRecords.addAll(missCallsList);callLogAdapter.notifyDataSetChanged();break;*/case R.id.newContachBtn:   //新建联系人User u=new User();UserContent content=new UserContent();content.setContentCategory(ActionCode.PHONE_ACTION);content.setContentText(getStackText());u.getListContent().add(content);app.setEditUser(u);startActivity(new Intent(DialActivity.this,EditContactActivity.class).putExtra("create",1));break;case R.id.saveToHaveBtn:   //保存到已有startActivity(new Intent(DialActivity.this,SelectContactsActivity.class).putExtra("actionCode",1).putExtra("data", getStackText()));break;case R.id.sendMsgBtn:      //发送短信Intent intentsms = new Intent(Intent.ACTION_VIEW);  intentsms.putExtra("sms_body",""); intentsms.putExtra("address",getStackText()); intentsms.setType("vnd.android-dir/mms-sms");startActivity(intentsms);break;default:break;}setInputBtnText();}public void setInputBtnText(){String s=getStackText();inputBtn.setText(s);}/** * 获取栈内容 * @return */public String getStackText(){Iterator iter=myStack.iterator();StringBuffer sb=new StringBuffer();while(iter.hasNext()){String s=(String) iter.next();sb.append(s);}return sb.toString();}class SearchContactAdapter extends BaseAdapter{private Context context;public SearchContactAdapter(Context context){this.context=context;}public int getCount() {return searchListUser.size();}public Object getItem(int position) {return searchListUser.get(position);}public long getItemId(int position) {return position;}class ItemView{public TextView nameTextView;     //姓名public TextView pinyinTextView;   //拼音public TextView numTextView;      //电话号码public TextView whereTextView;    //归属地public ImageView shortCutPhone;    //打电话public LinearLayout hideLayout;   //隐藏视图public LinearLayout callBtn;public LinearLayout msgBtn;public LinearLayout emailBtn;public LinearLayout detailBtn;}public View getView(int position, View convertView, ViewGroup parent) {ItemView itemView = null; if(convertView == null){convertView  = LayoutInflater.from(context).inflate(R.layout.dial_search_item, null);itemView = new ItemView();itemView.nameTextView = (TextView)convertView.findViewById(R.id.nameTextView);itemView.pinyinTextView = (TextView)convertView.findViewById(R.id.pinyinTextView);itemView.numTextView = (TextView)convertView.findViewById(R.id.numTextView);itemView.whereTextView = (TextView)convertView.findViewById(R.id.whereTextView);itemView.shortCutPhone = (ImageView)convertView.findViewById(R.id.shortcutPhone);itemView.hideLayout=(LinearLayout)convertView.findViewById(R.id.hideLayout);itemView.callBtn=(LinearLayout)convertView.findViewById(R.id.callBtn);itemView.msgBtn=(LinearLayout)convertView.findViewById(R.id.msgBtn);itemView.emailBtn=(LinearLayout)convertView.findViewById(R.id.emailBtn);itemView.detailBtn=(LinearLayout)convertView.findViewById(R.id.detailBtn);convertView.setTag(itemView);}else{itemView = (ItemView)convertView.getTag();}final User u=searchListUser.get(position);setNameHightLight(itemView.nameTextView,u.getMemberName(),u.getMemberNameNum());//setPinyinHightLight(itemView.pinyinTextView,u.getMemberName(),u.getMemberNameNum());setPhoneNumHightLight(itemView.numTextView,keyWord,u);final String phoneNum=itemView.numTextView.getText().toString();//image 打电话事件itemView.shortCutPhone.setOnClickListener(new OnClickListener() {public void onClick(View v) {String number = phoneNum;if(! number.equals("")){try{Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));startActivity(intent);}catch(Exception e){e.printStackTrace();}}}});//隐藏菜单   打电话按钮itemView.callBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {String number = phoneNum;if(! number.equals("")){try{Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));startActivity(intent);}catch(Exception e){e.printStackTrace();}}}});itemView.msgBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent = new Intent(DialActivity.this,SmsDetialActivity.class);intent.putExtra("number", phoneNum);intent.putExtra("DAILNUMBER", DAILNUMBER);startActivity(intent);}});itemView.emailBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {}});itemView.detailBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {app.setEditUser(u);startActivity(new Intent(DialActivity.this,EditContactActivity.class).putExtra("create",3));}});if(searchCurrentPosition==-1){itemView.hideLayout.setVisibility(View.GONE);}else if(position==searchCurrentPosition){itemView.hideLayout.setVisibility(View.VISIBLE);}else{itemView.hideLayout.setVisibility(View.GONE);}return convertView;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == DIALDETAIL){int result = data.getIntExtra("dialBack", 0);if(result == 1){app.dbService.initOrRefreshCallRecord();app.dbService.initOrRefreshMissCall();app.dbService.initOrRefreshOutCall();Message msg = new Message();msg.what = 3;handler.sendMessage(msg);}}super.onActivityResult(requestCode, resultCode, data);}/** * 设置姓名高亮 * @param tv * @param text */protected void setNameHightLight(TextView tv,String text,String json){SpannableStringBuilder style= new  SpannableStringBuilder(text); try{JSONObject o=new JSONObject(json);String [] arr2=text.split("");for(int j=0;j<arr2.length;j++){String ss=arr2[j];if(!ss.equals("")){if(!o.isNull((j-1)+"")){String value=o.getString((j-1)+"");if(value.charAt(0)=='1'){style.setSpan( new  ForegroundColorSpan(Color.BLUE),j-1,j,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}}}}}catch(Exception e){e.printStackTrace();}tv.setText(style); }/** * 设置搜索拼音文字高亮 * @param tv    * @param text    //文字内容 */protected void setPinyinHightLight(TextView tv,String text,String json){String letter=SpellUtils.getFull(text);   //获取姓名的全称的拼音SpannableStringBuilder style= new  SpannableStringBuilder(letter); try{JSONObject o=new JSONObject(json);String [] arr2=text.split("");int length2=arr2.length;int index=0;int move=0;for(int j=0;j<length2;j++){String ss=arr2[j];if(j>0){move=move+SpellUtils.getFull(arr2[j-1]).length();    index=move;}if(!ss.equals("")){if(!o.isNull((j-1)+"")){String value=o.getString((j-1)+"");if(value.charAt(0)=='0'){continue;}for(char c:value.toCharArray()){if(c=='1'){style.setSpan( new  ForegroundColorSpan(Color.BLUE),index,index+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}index++;}}}}}catch(Exception e){e.printStackTrace();}tv.setText(style); }/** * 设置电话号码高亮 * @param tv * @param keyWord * @param u */public void setPhoneNumHightLight(TextView tv,String keyWord,User u){ForeignCollection<UserContent>  contents=u.getContents();if(contents!=null){for(UserContent content:contents){if(ActionCode.PHONE_ACTION.equals(content.getContentCategory())){String num=content.getContentText();if(num!=null){if(keyWord.length()>=2){int start=num.indexOf(keyWord);if(start!=-1){int length=keyWord.length();SpannableStringBuilder style= new  SpannableStringBuilder(num);style.setSpan( new  ForegroundColorSpan(Color.BLUE),start,start+length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(style);break;}else{tv.setText(num);}}else{tv.setText(num);break;} }}}}}public class DialPagerAdapter extends PagerAdapter implements OnClickListener {public List<View> mListViews;public View v1;public View v2;public View v3;public View v4;public DialPagerAdapter(List<View> mListViews) {this.mListViews = mListViews;getViewClickListener(mListViews);}public void getViewClickListener(List<View> listview) {v1 = listview.get(0);v2 = listview.get(1);v3 = listview.get(2);v4 = listview.get(3);//所有dialAllList = (ListView)v1.findViewById(R.id.dial_all_list);dialAllList.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) {onClickItem(position,dialAllAdapter);}});dialAllList.setOnItemLongClickListener(new OnItemLongClickListener() {public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {delType = 1;return false;}});dialAllList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {OnItemLongClick(allRecordslist,menuInfo, menu);}});//未接dialMissList = (ListView)v2.findViewById(R.id.dial_miss_list);dialMissList.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {onClickItem(position,dialMissAdapter);}});dialMissList.setOnItemLongClickListener(new OnItemLongClickListener() {public boolean onItemLongClick(AdapterView<?> parent,View view, int position, long id) {delType = 2;return false;}});dialMissList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {OnItemLongClick(missCallsList,menuInfo, menu);}});//已拨打dialOutList = (ListView)v3.findViewById(R.id.dial_out_list);dialOutList.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {onClickItem(position,dialOutAdapter);}});dialOutList.setOnItemLongClickListener(new OnItemLongClickListener() {public boolean onItemLongClick(AdapterView<?> parent,View view, int position, long id) {delType = 3;return false;}});dialOutList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {OnItemLongClick(outCallsList,menuInfo, menu);}});}public void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView(mListViews.get(arg1));}public void finishUpdate(View arg0) {}@Overridepublic int getCount() {return mListViews.size();}@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(mListViews.get(arg1), 0);if(arg1==0){System.out.println("allRecordslist  :"+allRecordslist.size());dialAllAdapter = new DialAdapter(DialActivity.this,allRecordslist);dialAllList.setAdapter(dialAllAdapter);}else if(arg1 == 1){dialMissAdapter = new DialAdapter(DialActivity.this,missCallsList); dialMissList.setAdapter(dialMissAdapter);}else if(arg1 == 3){dialOutAdapter = new DialAdapter(DialActivity.this,outCallsList);dialOutList.setAdapter(dialOutAdapter);}return mListViews.get(arg1);}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == (arg1);}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}public void onClick(View v) {}@Overridepublic int getItemPosition(Object object) {// TODO Auto-generated method stubreturn POSITION_NONE;}//单击public void onClickItem( int position,DialAdapter ad){DialAdapter tempAdapter;tempAdapter  = ad;if(currentPosition==position){currentPosition=-1;}else{currentPosition=position;}tempAdapter.setCurrentPosition(currentPosition);tempAdapter.notifyDataSetChanged();}public void OnItemLongClick(List<NativeUser> list,ContextMenuInfo menuInfo,ContextMenu menu){AdapterView.AdapterContextMenuInfo info;List<NativeUser> uList;ContextMenuInfo menuInfor;ContextMenu menus;menus = menu;menuInfor = menuInfo;uList = list;try{info =(AdapterView.AdapterContextMenuInfo) menuInfo;int position = info.position;NativeUser user = uList.get(position);menus.setHeaderTitle(user.getPhoneNumber());menus.add(0, 0, 0, "从通话记录中删除");menus.add(0, 1, 0, "呼叫前修改号码");}catch(Exception e){e.printStackTrace();}}}public class DialOnPageChangeListener implements OnPageChangeListener {int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量int three = two +bmpW;public void onPageSelected(int arg0) {Animation animation = null;System.out.println("arg0    "+arg0);System.out.println("currIndex    "+currIndex);switch (arg0) {case 0:if (currIndex == 1) {animation = new TranslateAnimation(one, 0, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, 0, 0, 0);}else if (currIndex == 3) {animation = new TranslateAnimation(three, 0, 0, 0);}break;case 1:if (currIndex == 0) {animation = new TranslateAnimation(offset, one, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, one, 0, 0);}else if (currIndex == 3) {animation = new TranslateAnimation(three, one, 0, 0);}break;case 2:if (currIndex == 0) {animation = new TranslateAnimation(offset, two, 0, 0);} else if (currIndex == 1) {animation = new TranslateAnimation(one, two, 0, 0);}else if (currIndex == 3) {animation = new TranslateAnimation(three, two, 0, 0);}break;case 3:if (currIndex == 0) {animation = new TranslateAnimation(offset, three, 0, 0);} else if (currIndex == 1) {animation = new TranslateAnimation(one, three, 0, 0);} else if(currIndex == 2){animation = new TranslateAnimation(two, three, 0, 0);}break;}currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);dialImageLay.startAnimation(animation);}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageScrollStateChanged(int arg0) {}}}

更多相关文章

  1. android MotionEvent详解
  2. Android(安卓)ApiDemos示例解析(102):Views->Auto Complete->4.
  3. Android(安卓)GestureDetector滑动监听事件
  4. android中三种onClick事件的实现,与对比
  5. Android游戏开发系列教程第三讲(事件处理)
  6. 【安卓笔记】touch事件的分发和消费机制
  7. android 很多应用中用到的 listView + viewPager
  8. android studio 权限类,不断更新中 如果你有权限我这边没有 请告
  9. android数据库操作:根据过滤条件获取部分通讯录信息

随机推荐

  1. android学习 4-25使用Path 绘制几何图形
  2. 解析#android.view.InflateException#
  3. 使用bindService方式启动Service
  4. Android(安卓)浅析 RxJava (一) 使用
  5. Android(安卓)TextView 丰富多彩的字体样
  6. Android(安卓)ContentResolver
  7. android-圆角button
  8. Android--等待loading
  9. Activity瓦解坠落退出效果
  10. 获取系统联系人及电话