1

我有一个TextView曾经在屏幕上显示的内容,并且做了我想做的事。但是,我简化了一些后来的代码,这些代码通过触摸它的 parent 来重新定位它FrameLayout。现在,TextView(named angleView) 不再显示在屏幕上,但是当我打印出它的坐标时,它仍然以相同的方式工作。谁能看到我做错了什么?

这是我的onCreate()方法中的代码:

angleView = new TextView(getApplicationContext());
angleView.setTextColor(Color.RED);
angleView.setText("0");
angleView.setLayoutParams(new FrameLayout.LayoutParams(SCREEN_WIDTH/20, SCREEN_HEIGHT/20));

以及来自FrameLayout's的代码onTouchListener

preview.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            float y = (centerPoint.getY() - event.getY() + STATUS_BAR_HEIGHT);
            float x = (centerPoint.getX() - event.getX());
            double angle = Math.atan(y/x);
            setAngleFieldData(event, angle, y, x);
            setFingerFollower(event, angle);
            setYMeasure(event, y);
            setXMeasure(event, x);
            setTextPositions(event, angle, y, x);
            Log.i("angleX", String.valueOf(angleView.getX()));
            Log.i("angleY", String.valueOf(angleView.getY()));
            return true;
        }

        private void setAngleFieldData(MotionEvent event, double angle, float y, float x){
            angleView.setText(String.valueOf(angle));
            angleView.setX(event.getX());
            angleView.setY(event.getY());
            if(isRadians) {
                if(x < 0 && y >= 0){
                    angleView.setText(String.valueOf(2 * Math.PI + angle));
                }
            }

        }

(其他方法无关紧要,以前各个方法的所有代码都在onTouch.)

如果您想知道,是的,有一个:

preview.addView(angleView);

非常感谢!

编辑:所有代码都在onCreate()方法内,在Activity.

4

3 回答 3

1

ApplicationContext无法修改用户界面。改变:

angleView = new TextView(getApplicationContext());

经过:

angleView = new TextView(this);

或者,如果您在 Fragment 中:

angleView = new TextView(getActivity());
于 2013-05-02T01:52:18.770 回答
0

好的,我找到了它不起作用的真正原因(我现在对此感到非常愚蠢)。如果你看,你会看到我将参数设置为 SCREEN_WIDTH 和 SCREEN_HEIGHT。好吧,我在设置这两个常量之前初始化了angleView。

好一个,吉特:D

于 2013-05-02T02:23:33.403 回答
0

您应该使用活动上下文而不是应用程序上下文

   angleView = new TextView(ActivityName.this);

请在下面的链接中查看 commonsware 的答案

何时调用活动上下文或应用程序上下文?

于 2013-05-02T03:40:44.460 回答