アクティビティに画像をロードする ImageView があり、その上にいくつかの線を描画したいと考えています。描いた線をImageViewに重ねることができないようです。「View」を拡張する新しいクラス (myPainter) を作成し、アクティビティから myPainter.onDraw() をフックし、onCreate() で setContentView(mp) をフックすると、描画された線だけが得られます。私の ImageView は onCreate() からなくなりました。ImageView と行を同じレイアウトに表示するにはどうすればよいですか? また、ImageView の onTouch() をオーバーライドしているので、そこから xy クリック位置を取得できます。
public class myPainter extends View
{
public myPainter (Context context)
{
super (context);
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw (canvas);
Paint p = new Paint();
p.setColor(Color.RED);
canvas.drawLine (E_XMIN, E_YMIN, E_XMAX, E_YMAX, p);
}
}
@Override
public void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.main);
ImageView iv = (ImageView) findViewById(R.id.ImageView01);
iv.setOnTouchListener (this);
// this draws my lines, but I loose the pic above ^^^
myPainter mp = new myPainter(this);
setContentView(mp);
}
アップデート:
私は文字通り自分自身を隅に追いやったと思います。onTouchEvent() メソッドで、このコードに frameAnimation を追加するにはどうすればよいですか? ユーザーが画面に触れる場所のように。myPainter() クラスにコードを追加すると、Android のrocketAnimation の例で例外が発生します。
@Override
public boolean onTouchEvent (MotionEvent event)
{
//Log.d (TAG, "touchevent in myPainter");
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
Log.d (TAG, "down x:" + event.getX() + " y:" + event.getY());
int wClick = getClick (event.getX(), event.getY());
AnimationDrawable touchAni;
ImageView iv = (ImageView) findViewById (R.drawable.triangle);
iv.setBackgroundResource (R.drawable.nova);
touchAni = (AnimationDrawable) iv.getBackground ();
touchAni.start ();
return true;
}
return super.onTouchEvent (event);
}