質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1295閲覧

カスタムビューにおけるObjectAnimatorの設定方法

Shion_Ichikawa

総合スコア56

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/08/10 06:40

編集2018/08/10 10:50

こんにちは。

フレームレイアウトを拡張したカスタムビューで、カスタムビュー内のオブジェクトにObjectAnimatorを設定したいのですが、通常通りに設定すると、以下のエラーが出てしまいました。
どのようにObjectAnimatorを設定させればよいのでしょうか。

※申し訳ありません 今のコードに変更する前に投稿したコードが、一部のコード情報を消す際に不手際によりエラーコードとは異なる誤ったコードを投稿してしまいました。
このコードは別プロジェクトで再作成したものでありますのでこれが本物です。
お騒がせしてすみません。

↓MainActivity

java

1 2package developer.shion.com.tests; 3 4import android.support.v7.app.AppCompatActivity; 5import android.os.Bundle; 6 7public class MainActivity extends AppCompatActivity { 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 14 } 15}

activity_main

xml

1<?xml version="1.0" encoding="utf-8"?> 2<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <developer.shion.com.tests.CustomView 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" /> 12</FrameLayout>

CustomView

java

1package developer.shion.com.tests; 2 3import android.animation.ObjectAnimator; 4import android.content.Context; 5import android.support.annotation.Nullable; 6import android.util.AttributeSet; 7import android.view.ViewGroup; 8import android.widget.FrameLayout; 9import android.widget.ImageView; 10import android.widget.LinearLayout; 11 12public class CustomView extends FrameLayout { 13 public CustomView(Context context, @Nullable AttributeSet attributeSet){ 14 super(context,attributeSet); 15 final ImageView imageView=new ImageView(context); 16 imageView.setImageResource(R.drawable.ic_launcher_background); 17 imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 18 addView(imageView); 19 20 new Thread(new Runnable() { 21 @Override 22 public void run() { 23 try { 24 Thread.sleep(1500); 25 } catch (InterruptedException e) { 26 e.printStackTrace(); 27 } 28 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationX",0,500); 29 objectAnimator.setDuration(1000); 30 objectAnimator.start(); 31 } 32 }).start(); 33 } 34}

Log

108-10 10:30:02.854 19111-19158/developer.shion.com.tests E/AndroidRuntime: FATAL EXCEPTION: Thread-4 2 Process: developer.shion.com.tests, PID: 19111 3 android.util.AndroidRuntimeException: Animators may only be run on Looper threads 4 at android.animation.ValueAnimator.start(ValueAnimator.java:1011) 5 at android.animation.ValueAnimator.start(ValueAnimator.java:1065) 6 at android.animation.ObjectAnimator.start(ObjectAnimator.java:852) 7 at developer.shion.com.tests.CustomView$1.run(CustomView.java:30) 8 at java.lang.Thread.run(Thread.java:764)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakajika

2018/08/10 07:22

エラーの内容を見る限りだと、CustomViewExampleというクラスの方に問題がありそうなのでそちらのソースを載せていただいた方がいいように思います。
Shion_Ichikawa

2018/08/10 08:08

すみません、投稿する際にクラス名を変更した影響で、CoustomViewExampleが一部CustomViewになっていました。今の状態が正しいコードです。
Shion_Ichikawa

2018/08/10 08:10

ちなみに、いろいろ調べてみたところ、エラーの原因として本クラス外からUIを操作しようとしたためであることが挙げられるということがわかりましたが、その解決方法がわかりません。ご存知でしたらどうぞよろしくお願い致します。
kakajika

2018/08/10 08:24

エラーの原因はエラー文の通りで、「Looperを持たないスレッドの処理内でAnimatorを使おうとしたこと」によるものです。Androidではメインスレッド以外(自前で用意したスレッド)からUIを操作することは基本できないので、このようなエラーが発生します。
kakajika

2018/08/10 08:26

エラーが起きているのは本当にこのコードですか? エラーログにCustomViewExample$2.runというのが含まれていることからしても、何らかのスレッドを動かしていそうですが。。
keicha_hrs

2018/08/10 10:03 編集

独自VIewをXMLで配置するときには、タグを完全修飾名(com.abcdefg.******.CustomViewExampleのような)で書かなければ正しく実行できないはずですが。ご提示いただいたコードで実行しても、違うエラーが生じると思います。本当にこのコードで動かしているのしょうか?
keicha_hrs

2018/08/10 10:10

手元で動かしてみましたが(画像は適当)、タグを完全修飾名にするだけの変更でこちらでは正常にアニメーションすることが確認できました。ご提示いただいていない部分での問題ではないでしょうか。
Shion_Ichikawa

2018/08/10 10:52

すみません、一部コードを編集して最小限な部分のみ表示させたつもりでしたが、意図せず関係ある部分を消去していたようです。別プロジェクトで再度再現してコードを再び変更いたしました。ご指摘のほどよろしくお願いいたします。
guest

回答1

0

ベストアンサー

コメントで指摘した通りで、メインスレッド以外のスレッドからUI(Animator)を操作しようとしたのがエラーの原因ですね。今回の場合は、単純に1500ms経ってからアニメーションを実行したいというのがコードの意図のようですので、指定したms後にメインスレッドで処理を実行する postDelayed メソッドで置き換えてはどうでしょうか。

リファレンス:
https://developer.android.com/reference/android/view/View#postDelayed(java.lang.Runnable,%20long)

java

1postDelayed(new Runnable() { 2 @Override 3 public void run() { 4 ObjectAnimator 5 .ofFloat(imageView, "translationX", 0f, 500f) 6 .setDuration(1000) 7 .start(); 8 } 9}, 1500);

投稿2018/08/10 12:32

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shion_Ichikawa

2018/08/10 14:37

ありがとうございました。問題が解決しました。 いろいろお騒がせして申し訳ございませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問