我有SurfaceView
,我希望Bitmap Logo
内的canvas
可以移动
我做错了什么?
static float x, y;
Bitmap logo;
SurfaceView ss = (SurfaceView) findViewById(R.id.svSS);
logo = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
x = 40;
y = 415;
ss.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent me) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
switch(me.getAction()) {
case MotionEvent.ACTION_DOWN:
x = me.getX();
y = me.getY();
break;
case MotionEvent.ACTION_UP:
x = me.getX();
y = me.getY();
break;
case MotionEvent.ACTION_MOVE:
x = me.getX();
y = me.getY();
break;
}
return true;
}
});
public class OurView extends SurfaceView implements Runnable{
Thread t = null;
SurfaceHolder holder;
boolean isItOK = false;
public OurView(Context context) {
super(context);
holder = getHolder();
}
public void run (){
while (isItOK == true){
//canvas DRAWING
if (!holder.getSurface().isValid()){
continue;
}
Canvas c = holder.lockCanvas();
c.drawARGB(255, 200, 100, 100);
c.drawBitmap(logo, x,y,null);
holder.unlockCanvasAndPost(c);
}
}
public void pause(){
isItOK = false;
while(true){
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
t = null;
}
public void resume(){
isItOK = true;
t = new Thread(this);
t.start();
}
}
现在表面视图只是黑色..没有任何反应也没有发生颜色200, 100, 100
答案 0 :(得分:0)
您可能忘记在onDraw(Canvas c)
课程中实施OurView
方法,并将onTouchEvent
移到课堂内。
类结构应该是这样的:
public class OurView extends View implements Runnable {
//...your runnable stuff here
//...Runnable stuff means your run(), pause() etc.
public OurView(Context context) {
super(context);
//your constructor stuff here
// your constructor, do you find the similar stuff to this you wrote? That's your constructor, so you can just add:
holder = getHolder();
}
protected void onDraw (Canvas c) {
c.drawBitmap(bitmap, x, y);
//set colour, draw bitmap here, onDraw() will be called automatically, so just call invalidate(); when you need to "refresh" the view
}
public boolean onTouchEvent(MotionEvent e) {
float x = e.getX();
float y = e.getY();
swith(e.getAction()) {
case MotionEvent.ACTION_DOWN:
...
}
}
}
有关更明确的示例和参考,请转到:
希望它可以帮助你。