うにそんのブログ

ITやバイクや音楽について書いていこうと思います

【AndroidStudio】ScrollViewで横フリックイベントを使う

こんにちは、うにそんです。

 

今とある画像のviewerアプリ作っています。

それで、今まさに画像のViewer部分実装中なのです。

機能としては、「横にフリックすると次の画像を表示し、縦にフリックすると画面をスクロールして表示中の画像の下の部分を表示する」みたいな。

 

そこで標題の件です。

縦スクロールするためにScrollVeiwの中にImageViewを入れました。

そしてスクロールできることを確認して、フリックしたら次の画像へーって処理をonTouchEventで実装。

が、ここで問題発覚、onTouchEventが呼ばれない。

 

調べて見るとこんな記事が

turtle2005.blog.so-net.ne.jp

 

なんだかよく分からないけど、スクロールってそもそもフリックが必要なのに、同じScrollViewの上で横フリック実装しようとしてるのがいけないみたい。

多分フリックした時のイベントをScrollViewに取られちゃってるんでしょうね(適当)

 

で、もうちょっと調べてるとこんな記事

yamato-iphone.blogspot.jp

 

うーん相変わらずよく分からないが、onTouchEventの代わりにdispatchTouchEventを使えばいけるそうな。

やってみたら、横フリック動きました。

しかし今度はスクロールができない。

そりゃそうだ、今までScrollViewが使ってたタッチイベントを横フリックが奪ってしまったんだもの。

ということで、どうしたものかとさんざん悩みましたが、最終的にdispatchTouchEventの先で、縦フリックか横フリックか判断して、たてフリックだったらスクロールする!みたいな処理入れたらいけました。

ソースコードはこんな感じ

 

// タッチイベント
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
Log.d("","dispatchTouchEvent");
return mGestureDetector.onTouchEvent(event);
}

// タッチイベントのリスナー
private final GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() {

// フリックイベント
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {

try {

// 移動距離・スピードを出力
float distance_x = Math.abs((event1.getX() - event2.getX()));
float velocity_x = Math.abs(velocityX);
Log.d("","横の移動距離:" + distance_x + " 横の移動スピード:" + velocity_x);

// Y軸の移動距離が大きすぎる場合
if (Math.abs(event1.getY() - event2.getY()) > SWIPE_MAX_OFF_PATH) {
Log.d("","event1.getY() - event2.getY():" + String.valueOf(event1.getY() - event2.getY()));
scrollView.smoothScrollBy(0,(int)(event1.getY() - event2.getY()));
}
// 開始位置から終了位置の移動距離が指定値より大きい
// X軸の移動速度が指定値より大きい
else if (event1.getX() - event2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.d("","右から左");
imageIndex += 1;
showImage(bitmap.get(imageIndex));
Log.d("","imageIndex" + imageIndex);
}
// 終了位置から開始位置の移動距離が指定値より大きい
// X軸の移動速度が指定値より大きい
else if (event2.getX() - event1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.d("","左から右");
imageIndex -= 1;
showImage(bitmap.get(imageIndex));
}

} catch (Exception e) {
Log.d("",e.getMessage());
}
return false;
}
};

スクロールにはsrollView.smoothScrollByってやつ使ってますが、若干スクロールがかくついたりします。

あと指離した瞬間にスクロールされてしまいます。指の動きと同期したいんですがね。。。

なんかいい方法知っている方いたらご教示ください。

【AndroidStudio】Log.dとLog.vが出力されない

こんばんは、うにそんです。

 

さて、先週からAndroidアプリ作ってますが、ログが出ないという問題が発生しました。

昨日の夜2時間ほど調べたのですが解決せず...

さっき仕事から帰ってきて調べてたらこんな記事がありました。

sanzo83.hatenablog.com

 

ちなみに僕、Huaweiのp9 lite使ってます。

Huaweiさん何余計なことしてくれてんねん...

ということで

 

*#*#2846579#*#* にダイアル

 

うおっ見たことない画面出てきた

f:id:qunison:20170925215159p:plain

 

Background Settings -> Log Setting で AP  Log,Charge Log,Sleep Logにチェックを入れたら、Log.dとLog.vが出るようになりました。

【AndroidStudio】This view is not constrained〜っていうエラー

先ほどAndroid開発始めました、うにそんです。

 

画面作ろうと思ってxmlファイル開いて、frameLayoutを追加したところで標題のエラーが出ました。

「This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you add constraints」

 

うーんなんか制約がないって言ってますね。

あれか、iOSのオートレイアウトみたいにLayoutをどこ基準に配置するか指定してあげればいいのかなーと思って、おもむろにプレビュー画面で右クリックして

Center Horizontally,Cener Verticallyを選んだところ、下記の行が追加されてエラーが消えました

 

app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"

 

うん、やっぱりレイアウトをどこ基準でおいたらいいのか分からないよってことだったみたいですね。

【AndroidStudio】Unsupported major.minor version 52.0 Android開発始めました

こんばんは、うにそんです

 

突然ですが、Androidアプリ開発始めました。

前々からやろうかなーと思っていたのですが、アイデアが浮かばなかったんですよねー

 

でも今回ちょっと良さそうなアイデアが浮かんだので、ちょっとやってみよーとなったわけです。

 

はい。

 

とりあえず、もともと入っていたAndroidStudioを最新にアップデートし、プロジェクトを作成!!としたところで標題のエラーです。

ソースコードを見てみると、デフォルトで作成されたActivityが継承しているAppCompatActivityってやつがいけないみたいです。

 

とりあえずググってみると、ここに同じような人が

ytabuchi.hatenablog.com

 

この人はXamarinで出たみたいですが現象としては同じみたいです。

よくわかりませんが、Android7からJava8がサポートされていて、今回使っているAppCompatActivityってやつがJava8からじゃないと使えないみたいですね。

で、僕の環境ではjdk1.7.0_79を使っていたがいけなかったみたいです。

jdk1.8.0をインストールして設定して見たところ、エラーが消えました。

 

【GSR250】スクリーンつけてみた!

こんばんは、うにそんです。 

今日はGSR250につけているスクリーンを紹介したいと思います。

 

はい、これです。

この商品純正ではないもののGSR250専用のスクリーンみたいです。

メーカーのpuigってところもスペインの有名な会社らしく、信頼の置けるところです。

つけてみた感想ですが、防風性には正直あまり変化はないです笑

ただ見た目はすごい変わりました。

このスクリーン、ネットで「GSR250 スクリーン」とかで画像検索すると出てくるのですが、実際につけている写真が全然ないんですよね

 

なので載せておきます

f:id:qunison:20170829114937j:plain

 

こんな感じです。

車体が青系統の色買った人にはオススメしたいです。

メタリックブルーとかに合いそうだなー

【GSR250】USB電源とりつけてみた!

こんにちは、うにそんです。


以前紹介した愛車GSR250ですが、実は結構改造してます。
その一つにUSB電源取り付けがありますので、今日はこのやり方とか買った物とかを紹介したいと思います。
ただし、この作業はバッテリーもいじるので危険もあります。
誤りのないように書きますが、仮に事故があった際に責任を取ることはできない旨をご了承ください。

まず、僕が購入したものです。

USB電源本体です。
買った当時はポケットWifiも使っていたので、2ポートのものを買いました。
値段も300円くらいしか変わらないですし。

他にも下の2つとかには惹かれましたがすぐに取り付けたかった私は最寄りバイクショップになかったので断念
時間に余裕のある方はAmazonでこのあたりの商品を買うのが良いかと思います。

GSR250のハンドルには、バーの部分が少なく直にUSB電源が取り付けられません。
そのため、このマルチバーホルダーも買いました。


次に、やり方を紹介します

①外装を剥がす
②バッテリーに電源をとりつける
③コードを内側にしまいこむ
④ハンドルにUSB電源を取り付ける
⑤外装を取り付ける

おおまかにこの順で行いました。
順番に詳しく書いていきます

①外装を剥がす
まず外装を剥がします。

f:id:qunison:20170918211357p:plain
この順番で外装を剥がしていきます
※訂正です。①は外す必要ないです。(2018/3/21)

詳しい剥がし方はこの方が書いてくれています。助かりますねぇ。。。
minkara.carview.co.jp

②バッテリーに電源をとりつける
外装を剥がしたらバッテリーに電源を繋げます。
この時まず初めにバッテリーの黒い方につながっている線を外します。
これがつながったまま作業を行うと、感電してしまう恐れがあるので注意してください。
黒い方を外したら、USB電源とバッテリーを接続します。
ちなみにこのUSB電源、5Aのヒューズがついています。
ヒューズっていうのは安全装置みたいなもので、5A以上の電流が流れた時にUSB電源が壊れないようにここで電気を遮断するようにできています。

取り付けると下のようになります
f:id:qunison:20170918220755j:plain

③コードを内側にしまいこむ
次に、コードをしまい込みます。
外した外装の下にしまい込むようにコードをハンドルまで伸ばしていきます。
僕はまずバッテリー横の骨組みに沿わせて、タンクの下あたりからはエンジンから伸びているコードに沿ってハンドルまで伸ばしました。

④ハンドルにUSB電源を取り付ける
ハンドルにUSB電源を取り付けます。
まずマルチバーホルダーをミラーに取り付けます。
簡単なので省略!!
つけるとこんな感じです。
f:id:qunison:20170918221631p:plain

⑤外装を取り付ける
最後に外装を元に戻します。
これで終わりです。
思い出しながら書いているので、手順に誤りなどあったら教えてください〜

雨の連休

こんばんわ、うにそんです。

先週のことを仕事とプライベートの2点で書いていきます。

 

まず仕事ですが、割と順調でした。

まだまだダメダメな自分ですが、それなりにうまくいった一週間だと思います。

ただ一点思うことがありました。

PLとなんか合わない。

先週技術系の人と頻繁に話す機会があったんです。

そしたらその人と仕事の話ですごい盛り上がりました。会社の人であまり仲の良い人はいなかったんで、ちょっと嬉しかったです。

この時と比べるとPLと話しているとなんか話が伝わらないし、相手の話もわからないんですよねぇ。。。

何がいけないのか。。。これも分析と対応が必要だなぁ。。。

仕事の方はこんな感じですが、頑張っていこうと思います。

 

プライベートはですね、ちょっと荒れました。

昨日大学の友人たちとBBQをする予定でした。 

しかしあいにくの雨だったので、ボウリングをすることになりました。

集合時間の11:00、誰もこない。。。

 

僕+妻+友人5人で遊ぶ予定でしたが、結局

二人(A,Bとする)->10:30ごろに1時間遅刻の連絡があり、結局1時間半遅刻

二人(C,Dとする)->寝坊で連絡なし、2時間半遅刻

一人(Eとする)->前日に仕事が忙しく、遅れるとの連絡あり、1時間遅刻

 

となりました。。。

しかもA,B,Cからは謝罪なし。

さすがに腹が立ったので、この3人に対して遅刻しといてその態度はなんなの?と怒りました。実はこの3人遅刻の常習犯で、今までも何度も遅刻していましたが、3人とも素直に謝ってくれました。

 

これ、何が遅刻の原因かっていうと、僕たちの中に遅刻に対して怒る人がいなかったのが原因だと思うんですよね。

正直前から待たされるのはイライラしていたのですが、争いになったりするのが嫌だったのであんまり強く言えなかったんですよね。

なので今回は強く言えた自分を少し褒めてあげたいです笑

 

ちなみにこのあとは仲直りして予定通りボウリング->飲み会、と楽しく過ごすことができました。

滅多に吐かない僕がお店と駅と自宅で吐くぐらい、楽しい1日になりました。

 

 

遅刻に対して僕が思うことは、相手を待たせた分その相手に何かしてあげるべきだと思います。人に迷惑をかけて「ごめん」で終わるのは子供までだと思っています。まぁ程度にもよりますが。