Пользовательский метод ondraw не работает

Я работаю над приложением, в котором я хочу отображать другой текст на изображении. Когда я касаюсь другой позиции. Я работаю над другим изображением. В моей программе я использовал один класс для изменения изображения и один класс для рисования текста. на изображении. мой класс активности следующий...

public class VideosActivity extends Activity implements OnTouchListener 
{
    //DrawView draw;
    float a=0;
    float b=0;
    ImageView image;
    MotionEvent event;
    Button  back ;
    Button next;
    TextView t;
    String info = "";
    int count =0;
    FirstImage i;
    ViewFlipper c;
    Infoview v;
    String huma="human";

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videos_layout);
        i=new FirstImage(this);

        c=(ViewFlipper) findViewById(R.id.viewFlipper1);
        back = (Button) findViewById(R.id.button1);
        next = (Button) findViewById(R.id.button2);
        t=(TextView) findViewById(R.id.textView1);
         if(count==0)
        i.changeImage(R.drawable.human ); 
        i.invalidate();
        c.addView(i,0);
        c.setOnTouchListener(this);
        c.onTouchEvent(event);
    }

    public void pageinfo(float a,float b)
    {
        t.setText(Float.toString(a)+"x"+Float.toString(b)+"y");
        i.display( a, b);
    }

    public boolean onTouch(View v, MotionEvent me) 
    {
        // TODO Auto-generated method stub
        switch(me.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                a=me.getX();
                b= me.getY();
                pageinfo(a,b);
                break;
            case MotionEvent.ACTION_MOVE:
                a=me.getX();
                b= me.getY();
                pageinfo(a,b);
                break;
            case MotionEvent.ACTION_UP:
                a=me.getX();
                b= me.getY();
                pageinfo(a,b);
                break;
            case MotionEvent.ACTION_OUTSIDE:
                a=me.getX();
                b= me.getY();
                pageinfo(a,b);
                break;
            default: return false;
        }
        return true;
    }
}

класс, который используется для изменения изображения, выглядит следующим образом...

public class FirstImage extends LinearLayout {

    ImageView i;
    int x;
    Infoview v;
    String huma ="human";
    public FirstImage(Context context) { 
        super(context); 
          v=new Infoview(context);
        i= new ImageView (context); 
        LinearLayout.LayoutParams lp =  new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        addView(i, lp); 
        addView(v,lp);
        } 
    public FirstImage(Context context, AttributeSet attrs) { 
        super(context, attrs);
        } 
    protected void changeImage(int id){ 
        i.setImageResource(id);
        x=id;
        }
    public int getSrc() {
        // TODO Auto-generated method stub
        return x;
    }
    public void display(float a, float b) {
        // TODO Auto-generated method stub
        if(i.getId()==R.drawable.human){
            v.updateInfo(huma, a, b);
            i.invalidate();
            v.invalidate();
        }
    } 


}

Класс, который используется для рисования текста на изображении, выглядит следующим образом.

public class Infoview extends View {

 String info = "";
 float x = 0; //init value 
 float y = 0; //init value
 int color = Color.WHITE;

 public Infoview(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }

 public Infoview(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
 }

 public Infoview(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);

  Paint paint = new Paint();
  paint.setStyle(Paint.Style.FILL_AND_STROKE);
  paint.setColor(color);
  paint.setStrokeWidth(2);
  paint.setTextSize(30);

  canvas.drawLine(x-10, y, x+10, y, paint);
  canvas.drawLine(x, y-10, x, y+10, paint);
  canvas.drawText(info, x, y, paint);

 }

 public void updateInfo(String t_info, float t_x, float t_y){
  info = t_info;
  x = t_x;
  y = t_y;
  invalidate();
 }

 public void clearInfo(){
  info = "";
  x = 0;
  y = 0;
  invalidate();
 }

Я не понимаю, почему он не отображает текст на изображении...... Я думаю, что во время рисования изображения я использую один макет. Поэтому я должен включить класс рисования (Infoview) в этот макет, чтобы... Если кто-то думает, что я задаю этот вопрос, то прошу прощения... любая помощь приветствуется...

1 ответ

У меня было время прочитать полный код, но если вы переопределяете onDraw, вы не должны вызывать super.onDraw() внутри этого метода, так как это будет означать, что базовый класс сначала отрисовывает все.

Другие вопросы по тегам