-------------------------------------------------------------------------------------------------------------------------
package com.example.pinchtemplate;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//PinchTemplateのインスタンスを作成
PinchTemplate pinchTemplate = new PinchTemplate(this);
//PinchTemplateをアクティビティの画面に設定
setContentView(pinchTemplate);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
package com.example.pinchtemplate;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ScaleGestureDetector;
public class PinchTemplate extends SurfaceView implements SurfaceHolder.Callback, Runnable,
GestureDetector.OnDoubleTapListener,
GestureDetector.OnGestureListener,
ScaleGestureDetector.OnScaleGestureListener{
Thread mainLoop = null;
Paint paint = null;
private ArrayList<String> info;
private GestureDetector mGestureDetector;
private ScaleGestureDetector mScaleGestureDetector;
public PinchTemplate(Context context) {
super(context);
//SurfaceView描画に用いるコールバックを登録する
getHolder().addCallback(this);
// 描画用の準備
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
paint.setTextSize(23);
paint.setAntiAlias(true);
// スレッド開始
mainLoop = new Thread(this);
mainLoop.start();
//情報の生成
info = new ArrayList<String>();
info.add("PinchTemplate");
//ジェスチャーディテクターの生成
this.mGestureDetector = new GestureDetector(context, this);
this.mScaleGestureDetector = new ScaleGestureDetector(context, this);
//フォーカス指定
setFocusable(true);
Log.d("TEST",(String)info.get(0));
}
@Override
public void run() {
while(mainLoop != null){
Canvas canvas = null;
try{
canvas = getHolder().lockCanvas();
if(canvas != null){
canvas.drawColor(Color.BLACK);
//情報の描画
for(int i=0; i<info.size() ; i++){
canvas.drawText((String)info.get(i), 0, 24+26*i, paint);
}
}
}
finally{
if(canvas != null){
getHolder().unlockCanvasAndPost(canvas);
}
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//SurfaceView生成時に呼び出されるメソッド
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO 自動生成されたメソッド・スタブ
}
//情報の追加
private void addInfo(String str){
info.add(0,str);
while(info.size()>30) info.remove(info.size()-1);
invalidate();
}
@Override
public boolean onTouchEvent(MotionEvent event){
if(mScaleGestureDetector != null){
final boolean is = mScaleGestureDetector.isInProgress();
mScaleGestureDetector.onTouchEvent(event);
if(is || mScaleGestureDetector.isInProgress()){
return true;
}
}
if(mGestureDetector != null){
return mGestureDetector.onTouchEvent(event);
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO 自動生成されたメソッド・スタブ
addInfo("Down");
Log.d("TEST","onDown");
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
addInfo("Fling("+(int)velocityX+","+(int)velocityY+")");
return false;
}
@Override
public void onLongPress(MotionEvent e) {
addInfo("LongPress");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
addInfo("Scroll("+(int)distanceX+","+(int)distanceY+")");
return false;
}
@Override
public void onShowPress(MotionEvent e) {
addInfo("ShowPress");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
addInfo("Up");
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
addInfo("DoubleTap");
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
addInfo("DoubleTapEvent");
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
addInfo("SingleTap");
return false;
}
//ここからScaleGestureDetector.OnScaleGestureListenerのインターフェース
@Override
public boolean onScale(ScaleGestureDetector detector) {
addInfo("onScale");
return false;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
addInfo("onScaleBegin");
return false;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
addInfo("onScaleEnd");
}
}
-------------------------------------------------------------------------------------------------------------------------