1

我正在开发我想在图像上显示不同文本的应用程序。当我触摸不同的位置时。我正在处理不同的图像。在我的程序中,我使用了一个类来更改图像和一个类来绘制文本在图像上。我的活动课如下......

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)以......如果有人认为我在问这个问题,那么我很抱歉......感谢任何帮助......

4

1 回答 1

0

我确实有时间阅读完整的代码,但如果你重写onDraw,你应该在该方法内调用super.onDraw(),因为这意味着基类将首先绘制所有内容。

于 2012-05-18T05:40:45.713 回答