0

xmlファイルにcustomViewとしてSurfaceViewを実装する作業をしています。それにontouchメソッドを追加したいと思います。しかし、現在はアイコン画像を描画していません。誰でもここで私を助けてください、そしてそれにontouchメソッドを追加する方法にも答えてください。

  1. 問題-ビットマップを描画していません。
  2. 質問-それにタッチメソッドを追加する方法。

私のxmlファイル。

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:gif="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity" >

<rahul.surfacetest.ImageClass        
    android:id="@+id/viw"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:background="@drawable/them"
    android:layout_centerInParent="true"
    android:paddingTop="200dp" />

</RelativeLayout>

その私のメインクラス

public class MainActivity extends Activity{

ImageClass Is;
static float x,y=0;
Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Is=(ImageClass)findViewById(R.id.viw);
    bmp=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);       
}
}

その私の表面クラス

public class ImageClass extends SurfaceView implements OnTouchListener,Runnable { 

float x,y;
SurfaceHolder holder;
boolean isItOk = true;
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Paint p = new Paint();

public ImageClass(Context context, AttributeSet attrs) {
    super(context, attrs);
    y=x=10;
    holder = getHolder();
}

@Override
public boolean onTouch(View v, MotionEvent event) { 
    try {
        Thread.sleep(20);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        x=event.getX();
        y=event.getY();
        break;
    case MotionEvent.ACTION_UP:
        x=event.getX();
        y=event.getY();         
        break;
    case MotionEvent.ACTION_MOVE:
        x=event.getX();
        y=event.getY();
        break;
    default:
        break;
    }
    return true;        
}


@Override
public void run() {

    Canvas c = holder.lockCanvas();
    c.drawBitmap(bmp, x,y, null);
    holder.unlockCanvasAndPost(c);

}
}
4

1 に答える 1

0

RunnableとSurfaceViewがどのように機能するかを誤解しているかもしれません。このチュートリアルに従ってみてください。描画を実現するためにスレッドを使用していることに注意してください。

于 2013-03-24T18:38:34.693 に答える