-->

2016年10月

前回の投稿と同じく、まーこれも書くほどのものではないんだが、ビットマップをdrawBitmap()で縮小すると、setAntiAlias()で有効にしていても効かない。drawBimap()で有効にするにはsetFilterBitmap()を有効にするとアンチエイリアスが効いてきます。


このエントリーをはてなブックマークに追加

まー、書くほどのことでもないんだが、単純にメニューバーがあるJavaFXのアプリをmacOSで動かすとこんな感じになる。

001

Macだと、こうなってほしいんだが。

002

これは、MenuBarのsetUseSystemMenuBar(true)を呼べばいい感じになるw


このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

GestureDetectorとScaleGestureDetectorでピンチイン、ピンチアウト、タップや
ダブルタップに対応したときのメモです。

ActivityはOnGestureListener, OnDoubleTapListenerをインプリメントしておいて

GesttureDetectorとScaleGestureDetectorの変数を宣言する。


	protected GestureDetector mDetector; 
	protected ScaleGestureDetector mScaleGestureDetector; 

ActivityのonCreateで

	mDetector = new GestureDetector(this, this); 
	mDetector.setOnDoubleTapListener(this); 
	mScaleGestureDetector = new ScaleGestureDetector(this, this);

と、ジェスチャーを受け取るViewに対して

	View v = (View)findViewById(R.id.View1); 
	v.setOnTouchListener(new View.OnTouchListener() { 
		 
		@Override 
		public boolean onTouch(View v, MotionEvent event) { 
			boolean inProg; 
			 
			inProg = mScaleGestureDetector.isInProgress(); 
			mScaleGestureDetector.onTouchEvent(event); 
			if(inProg || mScaleGestureDetector.isInProgress()) { 
				return true; 
			} 
			 
			return mDetector.onTouchEvent(event); 
		} 
	});

としておく。

ViewのonTouchでは、
まず、今、ピンチイン、ピンチアウト中かを保存しておいて、ScaleGestureDetectorのonTouchEventを呼び出し、ピンチイン、ピンチアウト中に入ったり、呼び出し前にすでに入っている場合は処理したことにして終了する。ピンチイン、ピンチアウト中でなかったらGestureDetectorのonTouchEventを呼び出し、タップやダブルタップなどの認識処理にまわすようにする。

次に正しくタップやダプルタップを取るための各イベントでの処理を示します。

OnGestureListenerのイベント

onDown trueを返さないと次のイベントが正しく発生しないようです。
onFling フリックで発生するイベント。特に返す値は関係なさそう?
ピンチイン、アウトの終了後に発生する場合があるので何らかの対策をするべきかな?
onLongPress ロングタップで発生するイベント
onScroll スクロールで発生するイベント
onShowPress 特に何もしなくていいのかな?
onSingleTapUp シングルタップアップイベント。OnDoubleTapListenerのイベントで認識するので特何もしなくていい。OnDoubleTapListenerを使わない場合はここでタップの処理を行うのかな?

OnDoubleTapListenerのイベント

onDoubleTap ダブルタップのイベント。ここでダブルタップイベントの処理を行う。
onDoubleTapEvent 特に何もしない。実際、ダブルタップを行うとonDoubleTapのあとにonDoubleTapEventが2回来るのでonDoubleTapでダブルタップの処理を行ってこっちでは何もしないのでいいのかな?
onSingleTapConfirmed シングルタップのイベント。タップの処理をここで行う。

OnScaleGestureListenerのイベント

onScale ピンチイン、アウト中に発生する。
onScaleBegin ピンチイン、アウト開始時に発生する。
onScaleEnd ピンチイン、アウト終了時に発生する。

このエントリーをはてなブックマークに追加

まー、単純だ。
基本、Viewを継承したクラスを用意して、onDrawをオーバーライドしてそこで引数で渡されるcanvasを使ってビューの中身を描画するだけだ。

レイアウトエディタ(?)でこのビューを貼り付けるにはPaletteのAdvancedにある<view>をドラッグ&ドロップしてやると、ビューの一覧がでるのでカスタムビューのクラスを選んだOKを押せば配置できる。


このエントリーをはてなブックマークに追加

001

こんな感じにLinearLayoutにBUTTON1とBUTTON2を入れてある状態で、BUTTON2を非表示(setVisibility(View.INVISIBLE)する)にすると、こんな感じになる。(あれ?どっかで同じようなことを書いたようなwww)

002

BUTTON2は左によってほしいんだけど・・・
こんなときは、BUTTON1をsetVisibility(View.GONE)で非表示すると左による。

003

このエントリーをはてなブックマークに追加

↑このページのトップヘ