Привет, я пытаюсь получить мое приложение для обновления холста из пользовательского представления, которое я сделал. Этот вид создает квадрат с линиями и кругом в центре. Я хочу нажать кнопку и нарисовать случайные координаты x и y на холсте.Обновление холста? недействительными()?
Heres Мои MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// EditText numDart = (EditText) findViewById(R.id.numDarts);
setContentView(R.layout.activity_main);
}
@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;
}
public int convertToDpi(int px){
DisplayMetrics metrics = getResources().getDisplayMetrics();
int unit = metrics.widthPixels/20;
return px * unit;
}
public void drawCanvas(View v){
View view = (View) findViewById(R.id.canView);
Paint black = new Paint();
black.setColor(Color.BLACK);
black.setStyle(Style.FILL);
view.invalidate(); //dont know where to go from here
}
Heres Мой заказ Вид:
public CanView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Rect myrect = new Rect();
myrect.set(-10, 10, 10, -10);
Paint blue = new Paint();
Paint white = new Paint();
white.setColor(Color.WHITE);
white.setStyle(Paint.Style.FILL);
Paint black = new Paint();
black.setColor(Color.BLACK);
black.setStyle(Paint.Style.FILL);
blue.setColor(Color.BLUE);
blue.setStyle(Paint.Style.FILL);
canvas.drawRect(myrect, blue);
canvas.drawCircle(convertToDpi(10), convertToDpi(10),convertToDpi(3), white);
canvas.drawLine(convertToDpi(10), 0, convertToDpi(10), convertToDpi(20), black);
canvas.drawLine(0, convertToDpi(10), convertToDpi(20), convertToDpi(10), black);
canvas.scale(5, 5, 0, 0);
}
@Override
public void postInvalidate() { //Logic for redrawig goes here???
// TODO Auto-generated method stub
super.postInvalidate();
}
public int convertToDpi(int px){
DisplayMetrics metrics = getResources().getDisplayMetrics();
int unit = metrics.widthPixels/20;
return px * unit;
}
Я не понимаю, как ссылаться на холст из моего пользовательского просмотра и изменения или перерисовывать его. Im предполагая, что вы используете invalidate(); но я озадачен тем, как этот метод работает, может ли кто-нибудь помочь мне?
hmm do u означает осуществление обратного вызова к основному виду деятельности? и какой класс я использую getHolder(). addCallBack? извините, если это глупые вопросы, которые я действительно новичок в android – HighMrSai
Он должен быть в классе представления, делая это так, как вам кажется, вы расширяете 'SurfaceHolder', это должен быть тот класс, который вы его реализуете. – FabianCook
@FabianCook OP, вероятно, не использует SurfaceHolder, вместо этого просто расширяет представление и использует его вызов OnDraw. – SMUsamaShah