3

我有一个自定义视图(DrawFigures),它有一个 onTouch 方法来执行一系列操作。有一个布局,有几个按钮,一个 TextView 和一个 RelativeView 来动态添加自定义视图。然后,在 MainActivity.class 中,当在这个自定义视图中调用 onTouch 方法时,我需要接收 DrawFigures 中某些属性的值,以便在 TextView 组件中显示它们。

这是自定义视图的代码:

public abstract class DrawFigures extends View{
    private float value1;
    public boolean onTouch(Motion Event){
        int action = event.getAction();
        if(action==MotionEvent.ACTION_MOVE){
            // ... methods that provoke that value1 changes
        }else if(action==MotionEvent.ACTION_DOWN){
            // ...        
        }else if(action==MotionEvent.ACTION_UP){
            // ...
        }
    }
    // ...
    return true;
}

由于 DrawFigures 的 onTouch 方法,我无法接收 value1 以在 MainActivity 的 TextView 中显示它。这个问题怎么可能解决?在 MianActivity 中实现 OnTouch 方法?怎么做?MainActivity.class 如下所示:

public class MainActivity extends Activity implements View.OnTouchListener{
    DrawFigures fig;
    TextView txtInfo;
    // ...
    public void btnSecRec(View v){
        int id = v.getId();
        if (id == R.id.btnSecRec){
            RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
            parent.removeAllViews();
            fig = new DrawRectangleWithDimensions(this);
            fig.setOnTouchListener(this);
            fig.setFigure(10, 40);
            parent.addView(fig);
        }
    }
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        if (action == MotionEvent.ACTION_MOVE) {

            if (fig.touching == true) {
                String value = Float.toString(fig.getChangingDimensionValue());

                txtInfo.setText(value);
            }
        }
        return true;
    }
}
4

3 回答 3

0

您可以在活动中实现 onTouchListener,并在调用超类的 onTouchEvent 后,通过 getter 更新值。像这样的东西:

@Override
public boolean onTouch(final View v, final MotionEvent event) {
    super.onTouchEvent(event)
    float value1 = fig.getUpdatedValues()
    return true;
}

请记住,还要为您的活动中的该视图分配 OnTouchListener

于 2015-02-20T11:44:49.423 回答
0

您可以像这样在非活动类中将 value1 声明为静态。

static float value1;

然后像这样在 Activity 类中获取值:

public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction();
    String value = Double.toString(DrawFigures.value1);
    if (action == MotionEvent.ACTION_MOVE) {

        if (fig.touching == true) {
            String value = Float.toString(fig.getChangingDimensionValue());

            txtInfoc.setText(value);
        }
    }

或者由于您的值是私有的,您可以使用settergetter方法通过 DrawFigures 对象设置和检索值,然后您可以在整个应用程序中使用该对象。

如果您希望保留该值,可以使用SharedPreferences

于 2015-02-20T11:46:25.550 回答
0

尝试了一段时间后,我找到了解决方案。只需使用 MainActivity 的 onTouch 方法中的实例“fig”调用 DrawFigures 类中的 onTouchEvent 方法。

我要感谢那些花时间试图提供帮助的人,谢谢!

这是代码:

public class MainActivity extends Activity implements View.OnTouchListener{
DrawFigures fig;
TextView txtInfo;
// ...
public void btnSecRec(View v){
    int id = v.getId();
    if (id == R.id.btnSecRec){
        RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
        parent.removeAllViews();
        fig = new DrawRectangleWithDimensions(this);
        fig.setOnTouchListener(this);
        fig.setFigure(10, 40);
        parent.addView(fig);
    }
}
public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction();
    fig.onTouchEvent(event);
    if (action == MotionEvent.ACTION_MOVE) {

        if (fig.touching == true) {
            String value = Float.toString(fig.getChangingDimensionValue());
            txtInfo.setText(value);
        }
    }
    return true;
}

}

于 2015-02-21T17:02:14.367 回答