【问题标题】:android invalidate function is not calledandroid invalidate 函数没有被调用
【发布时间】:2013-10-05 19:24:22
【问题描述】:

当 findSellectedtBt() 在 findSellectedBt() 中调用 invalidate 时不起作用。 所以 onDraw() 不会被调用。

为什么这些代码不能正常工作?

public class CustomView extends View {



private Typeface t;
private Paint paint;
private Buttons sellectedBt;


public CustomView(Context context) {
    ... }

public CustomView(Context context, AttributeSet attrs) {
...}

public CustomView(Context context, AttributeSet attrs, int defStyle) {
...}

@Override
protected void onDraw(Canvas canvas) {
    if(isInEditMode()) return ;

    canvas.drawColor(Color.YELLOW);

    switch(sellectedBt) {
        case ID:
            t = Typeface.create(Typeface.DEFAULT, Typeface.NORMAL);
            paint.setTypeface(t);
            canvas.drawText("ID: 0000", 50, 100, paint);
        case PHOTO:
                    break;
        case LINE:
            break;
        default:
            break;
    }
}

public void findSellectedBt(Buttons buttonId ) {
    sellectedBt = buttonId;
    invalidate();
}

}

公共类 MainActivity 扩展 Activity {

private CustomView customView;
private Button btId;
private CheckBox btPhoto;
private ToggleButton btLineOff;
private Button btClaer;
private ToggleButton btBlue;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    customView = new CustomView(this);

    btId = (Button)findViewById(R.id.id);
    btPhoto = (CheckBox)findViewById(R.id.photo);

    btId.setOnClickListener(new OnClickListener() {
        public void onClick(View v){
            System.out.println("idOnclick");
            customView.findSellectedBt(Buttons.ID);

        }
    });

    btPhoto.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
            // TODO Auto-generated method stub
            System.out.println("photoChecked");

            if(arg1 == true)
                customView.findSellectedBt(Buttons.PHOTO);
        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

包 com.example.hw4_200921275;

公共枚举按钮 {ID、PHOTO、LINE、CLEAR、BLUE}

【问题讨论】:

  • 需要查看何时调用 invalidate... 是来自单独的线程还是 UI 线程?
  • 我无法区分单独的线程和 UI 线程。有什么区别?
  • 你在哪里打电话findSellectedBt
  • @ssantos public void findSellectedBt(Buttons buttonId) { sellectedBt = buttonId;无效(); } 在底部代码中
  • 是的,这是函数的定义,但我看不到任何调用findSellectedBt(buttonsObject) 的行,有吗?

标签: android ondraw invalidation


【解决方案1】:

仔细检查你是否在某个地方打电话

findSellectedBt(buttonsObject);

顺便注意Sellected中的错字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2017-04-18
    • 2011-12-30
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多