Как обновить данные для объекта, созданного из пользовательского класса view, чтобы его можно было отобразить в пользовательском представлении?

#java #android #android-layout #android-view #android-custom-view

#java #Android #android-layout #android-просмотр #android-пользовательский вид

Вопрос:

Моему приложению требуется опубликовать данные в пользовательском представлении и перерисовать представление в соответствии с отправленными данными из MainActivity. Вот пример кода. Пользовательский вид->

 public class custom_view extends View {
 private simple_line line;
 public custom_view(Context context) {
     super(context);
     line=new simple_line(0);
 }

 @Override
 protected void onDraw(Canvas canvas) {
     super.onDraw(canvas);
     line.draw_line(canvas);
 }

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     setMeasuredDimension(getMeasuredWidth(),getMeasuredHeight());
 }

 private class simple_line{
     private float x_val;
     private Paint mpaint;

     public simple_line(float val){
         x_val=val;
         mpaint=new Paint();
         mpaint.setColor(Color.RED);
         mpaint.setStyle(Paint.Style.STROKE);
         mpaint.setStrokeWidth(10);
     }

     public float getX_val() {
         return x_val;
     }

     public void setX_val(float x_val) {
         this.x_val = x_val;
         invalidate();
     }

     public void draw_line(Canvas canvas){
         Path mpath=new Path();
         mpath.moveTo(getWidth()/2 x_val,0);
         mpath.lineTo(getWidth()/2 x_val,getHeight());
         mpath.close();
         canvas.drawPath(mpath,mpaint);
     }
 }

 public void update_xval(float val){
     line.setX_val(val);
 }
}
  

Вот основное действие ->

 public class MainActivity extends AppCompatActivity{
private Button button;
private custom_view myview;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.mybutton);
myview=(custom_view)findViewById(R.id.myview);
myview=new custom_view(this);
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myview.update_xval(100);
        }
    });
}
}
  

Я не могу обновить x_val при нажатии кнопки.Где я ошибаюсь.Что нужно сделать, чтобы обновить x_val?

Ответ №1:

в draw_line(Canvas canvas) функции есть проблема. вы не вызываете эту функцию в custom_view . вам нужно invalidate() после draw_line(Canvas canvas) вызова.

Комментарии:

1. Я забыл добавить line.draw_line(canvas) в метод onDraw{ }. После его добавления. все еще не работает. Я также добавил метод invalidate() после вызова draw_line(Canvas холст). Все еще не работает.