1. 程式人生 > >Android仿qq聊天記錄待定與刪除功能效果

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>

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