android listview仿iphone通讯录ios 3dTouch
2017-08-05 21:44
459 查看
接上篇android listview仿ios 3dTouch效果,对代码进行整合进类似ios通讯录里面,效果图如下:
、
效果如上,在上篇的内容后面跳出电话信息。
popmenu布局文件代码
AllContactsFragment.java
//begin add by csc
getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
uri = (Uri) view.getTag();
if(uri!=null) {
count = 0;
sampleImg = DialerUtils.captureScreen(getActivity());
DialtactsActivity.imageUp.setVisibility(View.VISIBLE);
DialtactsActivity.imageDown.setVisibility(View.VISIBLE);
DialtactsActivity.imageUp.setImageBitmap(sampleImg);
gaussianBlurImg = DialerUtils.blur(getActivity(),sampleImg, 25f);// 高斯模糊图片
DialtactsActivity.imageDown.setImageBitmap(gaussianBlurImg);
DialtactsActivity.imageUp.setImageAlpha(255);
// HashMap item = (HashMap)getListView().getItemAtPosition(position);
// String section =String.valueOf(item.get("name").toString());//get每一行的数据的名字
nameOrNum = DialerUtils.getPhoneContacts(getActivity(),uri)[0] == null ? DialerUtils.getPhoneContacts(getActivity(),uri)[1] : DialerUtils.getPhoneContacts(getActivity(),uri)[0];
phoneNum = DialerUtils.getPhoneContacts(getActivity(),uri)[1];
DialtactsActivity.testTv.setText(nameOrNum);
int[] location = new int[2];
getListView().getChildAt(position - getListView().getFirstVisiblePosition()).getLocationOnScreen(location);
lp.setMargins(0, location[1], 0, 0);
DialtactsActivity.testTv.setLayoutParams(lp);
DialtactsActivity.viewShadow.setVisibility(View.VISIBLE);
DialtactsActivity.testTv.setVisibility(View.VISIBLE);
is3DTouch = true;
}
return false;
}
});
getListView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
if (is3DTouch) {
if (count < 255)
count = count + 8;
int alpha = 255 - count;
if (alpha < 0)
alpha = 0;
DialtactsActivity.imageUp.setImageAlpha(alpha);
if(alpha == 0){
myListener.showPopupWindow(DialtactsActivity.testTv,nameOrNum,phoneNum,uri);
DialtactsActivity.testTv.setVisibility(View.GONE);
return false;
}
}
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
// end add by csc
public interface MyListener
{
public void showPopupWindow(View view,String popName,String phoneNum,Uri uri);
}该方法在DialtactActivity.java中实现:
/*begin add by csc for 3d touch*/
public void showPopupWindow(View view,String popName, String phoneNum,Uri uri) {
final Uri uris = uri;
final String phoneNumber =phoneNum;
popNameTv.setText(popName);
popPhotoTv.setText(popName.subSequence(0, 1));
viewShadow.setVisibility(View.VISIBLE);
popNameLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (CompatUtils.hasPrioritizedMimeType()) {
ContactsContract.QuickContact.showQuickContact(getApplicationContext(), v, uris, null,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
} else {
ContactsContract.QuickContact.showQuickContact(getApplicationContext(), v, uris, ContactsContract.QuickContact.MODE_LARGE,
null);
}
popupWindow.dismiss();
}
});
popMmsLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(phoneNumber!=null) {
Uri smsToUri = Uri.parse("smsto:" + phoneNumber);
Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);
startActivity(intent);
popupWindow.dismiss();
}
}
});
popCallLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(phoneNumber!=null) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber));
startActivity(intent);
popupWindow.dismiss();
}
}
});
popupWindow.setTouchable(true);
popupWindow.showAsDropDown(view);
}
/*end add by csc for 3d touch*/
、
效果如上,在上篇的内容后面跳出电话信息。
popmenu布局文件代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/pop_name_ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/pop_name_bg" android:paddingLeft="10dp" android:gravity="center_vertical" android:layout_marginLeft="5dp" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pop_photo" /> <TextView android:id="@+id/pop_photo_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textColor="#FFFFFF" android:textSize="30sp" /> </RelativeLayout> <TextView android:id="@+id/pop_name" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:text="@string/imei_panel_close" android:layout_marginLeft="10dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" android:layout_marginLeft="2dp" > <LinearLayout android:id="@+id/pop_mms_ll" android:layout_width="match_parent" android:layout_height="110px" android:background="@drawable/pop_up_bg" android:paddingLeft="20dp" android:gravity="center_vertical" android:layout_marginTop="10dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pop_mms_unpress" /> <TextView android:layout_width="700px" android:layout_height="match_parent" android:gravity="center_vertical" android:text="@string/pop_mms" android:layout_marginLeft="10dp" /> </LinearLayout> <LinearLayout android:id="@+id/pop_call_ll" android:layout_width="match_parent" android:layout_height="110px" android:background="@drawable/pop_down_bg" android:paddingLeft="20dp" android:gravity="center_vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pop_phone_unpress" /> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:text="@string/pop_call" android:layout_marginLeft="10dp" /> </LinearLayout> </LinearLayout> </LinearLayout>在源代码中,通讯录的点击事件的页面是在Fragment里面的,这时候不能将高斯模糊的图片放在该布局上,要放到对应的activity,点击的时候利用回调处理popmenu的弹出。要注意的是弹出的和高斯模糊图片颜色过于接近,肉眼分别不出来效果,在最上面的高斯模糊图片上面再加一个带透明灰色的全屏view。
AllContactsFragment.java
//begin add by csc
getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
uri = (Uri) view.getTag();
if(uri!=null) {
count = 0;
sampleImg = DialerUtils.captureScreen(getActivity());
DialtactsActivity.imageUp.setVisibility(View.VISIBLE);
DialtactsActivity.imageDown.setVisibility(View.VISIBLE);
DialtactsActivity.imageUp.setImageBitmap(sampleImg);
gaussianBlurImg = DialerUtils.blur(getActivity(),sampleImg, 25f);// 高斯模糊图片
DialtactsActivity.imageDown.setImageBitmap(gaussianBlurImg);
DialtactsActivity.imageUp.setImageAlpha(255);
// HashMap item = (HashMap)getListView().getItemAtPosition(position);
// String section =String.valueOf(item.get("name").toString());//get每一行的数据的名字
nameOrNum = DialerUtils.getPhoneContacts(getActivity(),uri)[0] == null ? DialerUtils.getPhoneContacts(getActivity(),uri)[1] : DialerUtils.getPhoneContacts(getActivity(),uri)[0];
phoneNum = DialerUtils.getPhoneContacts(getActivity(),uri)[1];
DialtactsActivity.testTv.setText(nameOrNum);
int[] location = new int[2];
getListView().getChildAt(position - getListView().getFirstVisiblePosition()).getLocationOnScreen(location);
lp.setMargins(0, location[1], 0, 0);
DialtactsActivity.testTv.setLayoutParams(lp);
DialtactsActivity.viewShadow.setVisibility(View.VISIBLE);
DialtactsActivity.testTv.setVisibility(View.VISIBLE);
is3DTouch = true;
}
return false;
}
});
getListView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
if (is3DTouch) {
if (count < 255)
count = count + 8;
int alpha = 255 - count;
if (alpha < 0)
alpha = 0;
DialtactsActivity.imageUp.setImageAlpha(alpha);
if(alpha == 0){
myListener.showPopupWindow(DialtactsActivity.testTv,nameOrNum,phoneNum,uri);
DialtactsActivity.testTv.setVisibility(View.GONE);
return false;
}
}
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
// end add by csc
myListener.showPopupWindow(DialtactsActivity.testTv,nameOrNum,phoneNum,uri);当第一个出来的item透明度为不透明的时候,回调showPopupWindow(View view,String popName,String phoneNum,Uri uri)方法,处理popmenu的弹出
public interface MyListener
{
public void showPopupWindow(View view,String popName,String phoneNum,Uri uri);
}该方法在DialtactActivity.java中实现:
/*begin add by csc for 3d touch*/
public void showPopupWindow(View view,String popName, String phoneNum,Uri uri) {
final Uri uris = uri;
final String phoneNumber =phoneNum;
popNameTv.setText(popName);
popPhotoTv.setText(popName.subSequence(0, 1));
viewShadow.setVisibility(View.VISIBLE);
popNameLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (CompatUtils.hasPrioritizedMimeType()) {
ContactsContract.QuickContact.showQuickContact(getApplicationContext(), v, uris, null,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
} else {
ContactsContract.QuickContact.showQuickContact(getApplicationContext(), v, uris, ContactsContract.QuickContact.MODE_LARGE,
null);
}
popupWindow.dismiss();
}
});
popMmsLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(phoneNumber!=null) {
Uri smsToUri = Uri.parse("smsto:" + phoneNumber);
Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);
startActivity(intent);
popupWindow.dismiss();
}
}
});
popCallLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(phoneNumber!=null) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber));
startActivity(intent);
popupWindow.dismiss();
}
}
});
popupWindow.setTouchable(true);
popupWindow.showAsDropDown(view);
}
/*end add by csc for 3d touch*/
相关文章推荐
- iPhone 6s极致体验:3D-Touch+iOS 9系统
- android 简单模仿IOS的3D Touch功能
- android ListView的类IOS通讯录效果,分类ListView,ListView标题置顶
- navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) 判断是不是 移动设备 'ontouchstart' in window; 判断支不支
- Android之IphoneTreeView带组指示器的ExpandableListView效果
- Android 仿IOS3D时间选择器城市选择器
- Open Source C# (Mono Compatible) Library for Sending Push Notifications To iOS (iPhone/iPad APNS), Android (C2DM), Windows Phone Apps
- ios 3DTouch
- Android 7.1.1 之实现 3D Touch
- iOS-3D touch相关开发
- 【Android】安卓开发实战之仿iPhone通讯录demo的移植和优化
- iPhone, Android等设备上的Touch和Gesture
- 拆解iPhone 6S屏幕:8面薄层处处不同,3D Touch重新定义手机屏幕--ESM
- iOS 3D Touch浅谈
- android listView & 下拉刷新 & 仿通讯录的alpha
- js 判断iPhone|iPad|iPod|iOS|Android客户端
- Android学习之联系人PinnedHeaderListView(通讯录)
- 判断客户端js脚本-含ios、Android、iPhone、iPad
- iOS 9 新特性之实现 3D Touch