2015-04-27 4 views
0

В моем приложении я дизайн пользовательского представления, а вот кодКак разместить TextView на CustomView программно?

public class Tunnel extends View implements View.OnTouchListener { 

    Paint paint = new Paint(); 

    public Tunnel(Context context) { 
     super(context); 
     setOnTouchListener(this); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     paint.setColor(Color.RED); 
     for (int x = 0; x < canvas.getWidth(); x++) { 
      canvas.drawLine(x, (float) upperBound(x), x, (float) lowerBound(x), paint); 
     } 
     setBackgroundColor(Color.BLACK); 
    } 

    private double upperBound(double x) { 
     return 50 * Math.sin(x/50) + 400; 
    } 

    private double lowerBound(double x) { 
     return 50 * Math.sin(x/50) + 600; 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return false; 
    } 
} 

И это выглядит так

enter image description here

Теперь то, что мне нужно сделать, это добавить пользовательский TextView на это представление, которое покажет некоторый текст. Насколько я понимаю, мой конструктор должен выглядеть так:

public Tunnel(Context context) { 
     super(context); 
     setOnTouchListener(this); 
     TextView tv = new TextView(getContext()); 
     tv.setX(200); 
     tv.setY(200); 
     //todo show the textView 
    } 

Но я не знаю, что написать дальше. Как я могу применить textView к моему представлению? Заранее спасибо

ответ

0

попробовать

public Tunnel(Context context) { 
     super(context); 
     setOnTouchListener(this); 
     TextView tv = new TextView(getContext()); 
     tv.setX(200); 
     tv.setY(200); 
     tv.setText("Text"); 
     TheCustomView.addView(tv); 
    } 
+0

да я думал, что это будет что-то вроде этого, но что такое myLayout? У меня нет макета, определенного здесь – Carmine

+0

см. Мое редактирование ... –

0

Я унаследовал мой пользовательский вид с линейной планировкой, установите его, чтобы сделать метод OnDraw, и он работал на меня

public class Tunnel extends LinearLayout implements View.OnTouchListener { 

     Paint paint = new Paint(); 

     TextView tv; 

     public Tunnel(Context context) { 
      super(context); 
      setOnTouchListener(this); 
      setWillNotDraw(false); 
      tv = new TextView(getContext()); 
      tv.setX(450); 
      tv.setY(800); 
      tv.setTextSize(20f); 
      tv.setTextColor(Color.WHITE); 
      addView(tv); 
     } 

     @Override 
     public void onDraw(Canvas canvas) { 
      paint.setColor(Color.RED); 
      for (int x = 0; x < canvas.getWidth(); x++) { 
       canvas.drawLine(x, (float) upperBound(x), x, (float) lowerBound(x), paint); 
      } 
       setBackgroundColor(Color.BLACK); 
     } 

     private double upperBound(double x) { 
      return 50 * Math.sin(x/50) + 400; 
     } 

     private double lowerBound(double x) { 
      return 50 * Math.sin(x/50) + 600; 
     } 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return false; 
     } 
    } 
Смежные вопросы