1

画像に別のテキストを表示したいアプリケーションに取り組んでいます.別の位置に触れたとき.別の画像に取り組んでいます.私のプログラムでは、1つのクラスを使用して画像を変更し、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();
 }

画像にテキストが表示されない理由がわかりません......画像描画時に1つのレイアウトを使用していると思うので、そのレイアウトに描画クラス(Infoview)を含める必要があります...私がこの質問をしていると思っている人がいたら、申し訳ありません...どんな助けも大歓迎です...

4

1 に答える 1

0

完全なコードを読む時間はありましたが、onDrawをオーバーライドする場合、そのメソッド内でsuper.onDraw()を呼び出す必要はありません。これは、基本クラスが最初にすべてを描画することを意味するためです。

于 2012-05-18T05:40:45.713 に答える