我有一個ImageView在我的Activity中加載圖片,並且想要在其上繪製一些線條,好像我無法覆蓋我繪製到ImageView上的線條。如果我創建了一個新的類(myPainter),它擴展了'View',從activity中掛接myPainter.onDraw(),然後在onCreate()中設置ContentView(mp),我得到的就是繪製的線條。My ImageView從onCreate ()。我如何獲得的ImageView和線相同的佈局展現出來?我也Override'ing onTouch()爲ImageView的,所以我可以從它那裏得到的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?就像用戶觸摸屏幕的地方一樣。而Android rocketAnimation例如導致異常,如果我將代碼添加到myPainter()類:
@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);
}
道歉,但我不知道我理解你的答覆。這隻會顯示ImageView,並且不會在myPaint中觸發onDraw()以獲取頂部繪製的線條。有沒有辦法鉤onDraw()在不*擴展視圖的類?猜猜這可能是一個更好的問題。 – wufoo 2011-01-07 16:20:35
由於您正在擴展View,因此應該像在任何View中那樣自動調用onDraw。在你的onDraw中調用super應該從setContentView(它應該有你的圖像)繪製所有設置,然後在那之後你正在做你的自定義繪圖。 – elevine 2011-01-07 16:45:56