从子视图Android处理布局



使其变短。

我正在开发一个Android笔记程序。以下是我想做的事情:我有一个自定义类扩展视图,当我的程序启动(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开发的新手,所以我在这里感到困惑。是否只有扩展"活动"的类才能处理布局?

非常感谢您的关注。

我想你想做的是:

避免说我有两个类:扩展viewView01和也扩展viewView02。因此,为了在布局中添加视图,我会这样做:

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,如果不告诉我,我可以举一个例子。

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

每次触摸都会有许多onTouch活动。你可能需要检查手指何时向上,然后添加。。。这样你就不会添加一堆,然后在某个地方遇到另一个问题。

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

最新更新