1

我的 PopupView 中有一个 LinearLayout,这个 LinearLayout 中有一个按钮。此按钮的事件侦听器工作正常,但按下(突出显示)的动画未启动。我做错了什么?求求你了!

    public class PopupView extends View 
{
    private PopupWindow popUp;
    private LinearLayout popUpLayout;
    private TextView titleTextView;
    private TextView lengthTextView;
    private TextView heighTextView;
    private TextView percentTextView;
    private Button buttonOk;
    private Button buttonDelete;
    private EditText edTextLength, edTextHeight;
    private OnClickListener onClick;
    private LayoutParams params;
    private int popUpWidth = 0;
    private int popUpHeight = 0;
    private int lastPopupped;
    private boolean isCreated = false;
    private int popUpX, popUpY;

    public static final int POINT_MOVE = 1;

    public PopupView(Context context)
    {
        super(context);
        popUp = new PopupWindow(context);
        popUpLayout = new LinearLayout(context);
        titleTextView = new TextView(context);
        lengthTextView  = new TextView(context);
        heighTextView  = new TextView(context);
        percentTextView = new TextView(context);
        buttonOk = new Button(context);
        buttonDelete = new Button(context);
        titleTextView.setTextColor(Color.BLACK);
        lengthTextView.setTextColor(Color.BLACK);
        heighTextView.setTextColor(Color.BLACK);
        percentTextView.setTextColor(Color.BLACK);
        buttonOk.setText("OK");
        buttonOk.setId(1);
        buttonDelete.setText("Delete");
        buttonDelete.setId(2);

        params = new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);
        popUpLayout.setClickable(true);
        popUpLayout.setOrientation(LinearLayout.VERTICAL);

        popUp.setContentView(popUpLayout);
    }

    public void createPopup (View parent, int typeOfPopUp, DataContainer dContainer, int numOfPoint, int statusBar, 
            float scaleFactor, int scrollX, int scrollY)
    {
        switch (typeOfPopUp)
        {       
        case 1: 
            titleTextView.setText("Ground Point # " + (1 + numOfPoint));
            lengthTextView.setText("Length = " + dContainer.groundPoints.get(numOfPoint).length);
            heighTextView.setText("Heigh = " + dContainer.groundPoints.get(numOfPoint).heigh);

            onClick = new OnClickListener()
            {
                public void onClick (View v)
                {
                    switch (v.getId())
                    {
                    case 1:
                        System.out.println("OK pressed!");
                        break;

                    case 2:

                        break;
                    }
                }
            };

           buttonOk.setOnClickListener(onClick);
           buttonOk.setFocusable(true);
           buttonDelete.setOnClickListener(onClick);

            popUpLayout.removeAllViews();
            popUpLayout.addView(titleTextView, params);
            popUpLayout.addView(lengthTextView, params);
            popUpLayout.addView(heighTextView, params);
            buttonDelete.setEnabled(true);
            popUpLayout.addView(buttonDelete, params);
            popUpLayout.addView(buttonOk, params);


            popUpWidth = (int)(titleTextView.getTextSize() / 2 * 18);
            popUpHeight = (int)(titleTextView.getTextSize() * 13);

            popUpX = (int)((dContainer.groundPoints.get(numOfPoint).length) * scaleFactor - scrollX);
            popUpY = (int)((dContainer.groundPoints.get(numOfPoint).heigh) * scaleFactor + statusBar - scrollY);

            popUpX += statusBar;
            popUpY += statusBar;

            popUp.showAtLocation(parent, Gravity.NO_GRAVITY, popUpX, popUpY);
            popUp.update(popUpX, popUpY, popUpWidth, popUpHeight);

            lastPopupped = numOfPoint;
            isCreated = true;
            break;
        }
    }

    public void removePopup ()
    {
        if (isCreated)
        {
            popUp.dismiss();
        }
    }

    public void updatePopup (DataContainer dContainer, int statusBar, 
            float scaleFactor, int scrollX, int scrollY)
    {
        if (isCreated)
        {
            popUp.update((int)((dContainer.groundPoints.get(lastPopupped).length) * scaleFactor - scrollX),
                    (int)((dContainer.groundPoints.get(lastPopupped).heigh) * scaleFactor + statusBar - scrollY),
                    popUpWidth, popUpHeight);
        }
    }

}
4

1 回答 1

0

默认情况下 PopupView 是不可聚焦的。需要调用方法popup.setFocusable(true)。谢谢大家!

于 2012-12-08T22:50:57.880 回答