【问题标题】:Invalidate() not refreshing screenInvalidate() 不刷新屏幕
【发布时间】:2014-02-19 20:31:05
【问题描述】:

我想让它按屏幕移动我的矩形。侦听器向控制台提供输出,但不会使屏幕无效。

public class DrawView extends View{
    Paint paint = new Paint();
    static int x = 20;
    static int y = 20;

public DrawView(Context context){
    super(context);
    paint.setColor(Color.GREEN);
}

@Override
public void onDraw(Canvas canvas){
    canvas.drawRect(x,y,100,100,paint);
}

public void OTListener(){
    setOnTouchListener(new OnTouchListener(){
        public boolean onTouch(View DrawView, MotionEvent e){
            x = 100;
            y = 100;
            invalidate();

            return false;
        }


    });
}

}

【问题讨论】:

  • 它给出了什么输出?你是如何调用它的?
  • 我看不到你在哪里打电话给OTListener() 来打电话给setOnTouchListener()。您是在别处调用它还是忘记调用它?

标签: java android ontouchlistener invalidation


【解决方案1】:

试试这个。如果它是视图层次结构中的顶视图,它应该可以工作。 如果您想在 onTouchEvent() 中执行更高级的操作,则必须查看 event.getAction()...

public class DrawView extends View {

    Paint paintRect = new Paint();
    Paint paintClear = new Paint();
    private Point touch = new Point();

    public DrawView(Context context){
        super(context);
        paintClear.setColor(Color.BLACK);
        paintRect.setColor(Color.GREEN);
    }

    @Override
    public void onDraw(Canvas canvas){
        canvas.drawPaint(paintClear);
        canvas.drawRect(touch.x-50,touch.y-50,touch.x+50,touch.y+50,paintRect);
    }

    private void touch(int x, int y) {
        touch.set(x,y);          
        invalidate();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {       
        touch((int)event.getX(), (int)event.getY());
        return true;
    }

}

【讨论】:

    【解决方案2】:

    在其他方法中使用 invalidate() 不起作用。如果您想从其他方法刷新活动,则需要使用 postinvalidate()。

    【讨论】:

    • 这太错误了。请不要散布虚假信息。
    • @ElDuderino 如果你能解释一下为什么它是错误的以及你应该怎么做会更有帮助。
    • @ElDuderino 这就是我修复它的方式。提交一个更好的答案,我会选择正确的。
    • 好的,我做到了:) 要评论您的答案,您正在混合一些东西。您只能在类视图上使用 invalidate,这意味着在类视图中的任何方法中,如果您有权访问此视图,则可以从活动中使用。您不能对活动调用无效,它不是视图,但它具有视图。 postInvalidate() 用于从另一个线程刷新你的 UI。
    猜你喜欢
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多