0

使其简短。

我正在开发一个安卓笔记程序。这是我想要做的:我有一个自定义类扩展视图,当我的程序启动(onCreate)时,我将此自定义视图(名为 View01)添加到我的主布局中。然后,当我双击当前视图(View01)时,我想添加另一个视图(到我的主布局或其他可能的布局)。我的代码是这样的:(这是 View01 的 onTouchEvent 函数的一部分)

public class NotePanel extends View {

private long startTime;
private long endTime;
private DrawPanel drawPanel;
private LinearLayout drawLayout;
final private int pressingTime = 600;
private Context applicationContext;

public NotePanel(Context applicationContext) {
    // TODO Auto-generated constructor stub
    super(applicationContext);
    //this.applicationContext = applicationContext;
    startTime=0;
    endTime=0;
    this.setBackgroundColor(Color.BLUE);
}

@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getActionMasked() == MotionEvent.ACTION_DOWN){
        startTime = System.currentTimeMillis(); 
        System.out.println("click");
    }

    if(event.getActionMasked() == MotionEvent.ACTION_UP){
        endTime = System.currentTimeMillis();
        System.out.println(endTime-startTime);
        if (endTime-startTime >= pressingTime){

            drawPanel = new DrawPanel(this.applicationContext);
            //drawPanel.setVisibility(GONE);

            drawPanel.setBackgroundColor(Color.RED);
            //drawLayout = new LinearLayout(applicationContext);
            drawLayout.addView(drawPanel);

        }
    }

    return true;
}

问题是我什至无法对 View01 中的 drawLayout 做任何事情,我是 Android 开发的新手,所以我在这里感到困惑。只有扩展“活动”的类才能处理布局吗?

非常感谢大家的关注。

4

3 回答 3

1

我认为您想要做的是:

以免说我有两个类:View01扩展viewView02扩展view。因此,要将视图添加到布局中,我会这样做:

public class NotePanel extends ViewGroup {

private long startTime;
private long endTime;
private DrawPanel drawPanel;
//private LinearLayout drawLayout;
final private int pressingTime = 600;

public NotePanel(Context applicationContext) {
    super(applicationContext);
    startTime=0;
    endTime=0;
    this.setBackgroundColor(Color.BLUE);
    drawPanel = new DrawPanel(applicationContext);
    this.addView(drawPanel);
    //drawLayout = new LinearLayout(applicationContext);
    //drawLayout.addView(drawPanel);
}
public NotePanel(Context applicationContext, AttributeSet attrs){
    super(applicationContext);
    startTime=0;
    endTime=0;
    this.setBackgroundColor(Color.YELLOW);
    drawPanel = new DrawPanel(applicationContext);
    this.addView(drawPanel);
}

@Override 
protected void onLayout(boolean changed, int l, int t, int r,int b){

}

@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getActionMasked() == MotionEvent.ACTION_DOWN){
        startTime = System.currentTimeMillis(); 
        System.out.println("click");
    }

    if(event.getActionMasked() == MotionEvent.ACTION_UP){
        endTime = System.currentTimeMillis();
        System.out.println(endTime-startTime);
        if (endTime-startTime >= pressingTime){
            drawPanel.setVisibility(VISIBLE);
            drawPanel.setBackgroundColor(Color.GREEN);              
        }
    }

    return true;
}

我希望这会有所帮助。另外我假设您知道如何添加view01,如果不告诉我,我可以举个例子。

于 2012-08-01T22:19:52.087 回答
0

尝试将 drawLayout 设置为全局变量并将其设置为 onCreate,而不是 onTouch。应该能够从 onTouch 引用它,并且它是全局的。

每次触摸也会获得许多 onTouch 事件。您可能必须检查手指何时抬起,然后添加...这样您就不会添加一堆并在某个地方遇到另一个问题。

于 2012-08-01T22:11:33.927 回答
0

最简洁的方法是在自定义视图中定义自己的事件类型和事件侦听器接口。当检测到适当的用户手势时,视图可以通知任何已注册的事件监听器。然后在您的活动中实现一个自定义事件侦听器,它可以通过更新容器布局的内容来响应事件。

于 2012-08-01T22:12:30.967 回答