Android仿qq聊天记录待定与删除功能效果

模仿手机qq,历史聊天记录长按会弹出待定和删除按钮的效果。
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>

ListItemDeleteDemo.zip


原文:http://www.eoeandroid.com/thread-326918-1-1.html


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值