模仿手机qq,历史聊天记录长按会弹出待定和删除按钮的效果。admin管理员组文章数量:1646315
qq效果图 代码实现的效果图
首先,看到这个效果,想一下实现的思路:弹出的待办和删除按钮,是通过dialog实现的。那么这个dialog就要能完成几个效果,第一:自定义界面,第二:控制dialog的显示位置,第三:点击dialog区域之外的地方,dialog要消失,第四:dialog显示的时候,activity不要变暗。
下面就一步一步解决问题:
1,自定义dialog
package com.example.listitemdeletedemo;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
/**
* @文件名称: MyDialog.java
* @功能描述: 自定义dialog
* @版本信息: Copyright (c)2014
* @开发人员: vincent
* @版本日志: 1.0
* @创建时间: 2014年3月18日 下午1:45:38
*/
public class MyDialog extends Dialog implements OnClickListener {
private TextView leftTextView, rightTextView;
private IDialogOnclickInterface dialogOnclickInterface;
private Context context;
public MyDialog(Context context, int theme) {
super(context, theme);
this.context = context;
// TODO Auto-generated constructor stub
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_dialog);
leftTextView = (TextView) findViewById(R.id.textview_one);
rightTextView = (TextView) findViewById(R.id.textview_two);
leftTextView.setOnClickListener(this);
rightTextView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialogOnclickInterface = (IDialogOnclickInterface) context;
switch (v.getId()) {
case R.id.textview_one:
dialogOnclickInterface.leftOnclick();
break;
case R.id.textview_two:
dialogOnclickInterface.rightOnclick();
break;
default:
break;
}
}
public interface IDialogOnclickInterface {
void leftOnclick();
void rightOnclick();
}
}
2,控制dialog显示位置
长按listview的item时。获取当前item在屏幕中的绝对位置,取其中的y值,即高度。根据listview item的height以及屏幕的高度,计算得到dialog的垂直位置,水平位置就直接居中就OK了
int[] location = new int[2];
// 获取当前view在屏幕中的绝对位置
// ,location[0]表示view的x坐标值,location[1]表示view的坐标值
view.getLocationOnScreen(location);
view.setBackgroundColor(getResources().getColor(R.color.blue));
currentItemView = view;
longClickPosition = position;
DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = MainActivity.this.getWindowManager().getDefaultDisplay();
display.getMetrics(displayMetrics);
WindowManager.LayoutParams params = myDialog.getWindow().getAttributes();
params.gravity = Gravity.BOTTOM;
params.y =display.getHeight() - location[1];
myDialog.getWindow().setAttributes(params);
myDialog.setCanceledOnTouchOutside(true); //点击dialog区域之外的地方,dialog消失
myDialog.show();
3,dialog显示的时候,activity不变暗,这个在dialog的style中设置
<style name="MyDialogStyle" parent="@android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/white</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
原文:http://www.eoeandroid/thread-326918-1-1.html
版权声明:本文标题:Android仿qq聊天记录待定与删除功能效果 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729447386a1201539.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论