画面の左から右へImageView
スライドを滑らかなアニメーションで作成する必要があります(移行中にImageView
を表示したい)次のコードで試しました:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
camion.animate()
.translationX(width)
.setDuration(2000)
.setInterpolator(new LinearInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
//camion.setVisibility(View.GONE);
}
});
ImageView
は動きますが、アニメーションが遅れており、私が望むようにスムーズではありません。コードで何が間違っていますか?
この種のトゥイーンアニメーションの作成は簡単です。手順に従うだけで、
ステップ1
anim
ディレクトリ内にres
ディレクトリを作成し、これを_slide.xml
_として配置します
_<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/linear_interpolator"
Android:fillAfter="true">
<translate
Android:fromXDelta="0%p"
Android:toXDelta="75%p"
Android:duration="800" />
</set>
_
2つの属性fromXDelta
およびtoXDelta
を変更することで、アニメーションを明らかにカスタマイズできます。 %pは、親に対してを参照します。これは単に、親に対してイメージを75%移動することを意味します。
ステップ2
_// Refer the ImageView like this
imageView = (ImageView) findViewById(R.id.img);
// Load the animation like this
animSlide = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.slide);
// Start the animation like this
imageView.startAnimation(animSlide);
_
必要に応じて、setInterpolator()
およびsetListeners()
を使用することもできます。ここでは簡単にするためにそれらを示していません。必要な場合は、お知らせください。
[〜#〜] note [〜#〜]
あなたが繰り返し述べたように、あなたはラグアニメーションを経験していることを。このアニメーションを3つの実際のデバイスと2つのエミュレーターでテストしましたが、アニメーションはすべてスムーズでした。 Moto EなどのローエンドデバイスからNexus 5やGalaxy S6などのハイエンドデバイスでテスト済み。
このコードの実行にまだ遅れがある場合は、テストデバイスが原因である必要があります。コードは完璧です。
[〜#〜] update [〜#〜]
Lollipopで実行しているMoto Gも確認したところ、アニメーションはスムーズに実行されています。これは非常に小さくて軽いアニメーションであり、決して遅れることはありません。それでも遅延が発生する場合は、テスト対象のデバイスか、そのアクティビティ上の他のコードの一部である必要があり、UIが遅くなったり応答しなくなったりします。
どれがあなたに当てはまるかを確認してみてください、
AsyncTask
これらの重い操作用TranslateAnimation animate = new TranslateAnimation(0, -view.getWidth(), 0, 0);
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
これを試して。画像ビューをアニメーション化します。
ImageView img_animation = (ImageView) findViewById(R.id.img_animation);
Display display = getWindowManager().getDefaultDisplay();
float width = display.getWidth();
TranslateAnimation animation = new TranslateAnimation(0, width - 50, 0, 0); // new TranslateAnimation(xFrom,xTo, yFrom,yTo)
animation.setDuration(1000); // animation duration
animation.setRepeatCount(5); // animation repeat count
animation.setRepeatMode(2); // repeat animation (left to right, right to
// left )
// animation.setFillAfter(true);
img_animation.startAnimation(animation); // start animation
以下のコードを試してください
TranslateAnimation animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, 1500.0f); // new TranslateAnimation (float fromXDelta,float toXDelta, float fromYDelta, float toYDelta)
animation.setDuration(2000); // animation duration
animation.setRepeatCount(1); // animation repeat count if u repeat only once set to 1 if u don't repeat set to 0
animation.setFillAfter(false);
your_view .startAnimation(animation);//your_view for mine is imageView
これがあなたのために働くことを願っています
animation.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".Animation" >
<ImageView
Android:id="@+id/img_animation"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="30dp"
Android:layout_marginTop="42dp"
Android:src="@drawable/Emo_im_laughing" />
</RelativeLayout>
Animation.Java
import Android.os.Bundle;
import Android.app.Activity;
import Android.view.animation.TranslateAnimation;
import Android.widget.ImageView;
public class Animation extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.);
ImageView img_animation = (ImageView) findViewById(R.id.img_animation);
TranslateAnimation animation = new TranslateAnimation(0.0f, 400.0f,
0.0f, 0.0f);
animation.setDuration(5000);
animation.setRepeatCount(5);
animation.setRepeatMode(2);
animation.setFillAfter(true);
img_animation.startAnimation(animation);
}
}
public class MainActivity extends Activity {
int windowwidth;
int windowheight;
private LayoutParams layoutParams;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
windowwidth = getWindowManager().getDefaultDisplay().getWidth();
windowheight = getWindowManager().getDefaultDisplay().getHeight();
final ImageView img = (ImageView) findViewById(R.id.imageView1);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
LayoutParams layoutParams = (LayoutParams) img
.getLayoutParams();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int) event.getRawX();
int y_cord = (int) event.getRawY();
if (x_cord > windowwidth) {
x_cord = windowwidth;
}
if (y_cord > windowheight) {
y_cord = windowheight;
}
layoutParams.leftMargin = x_cord - 25;
layoutParams.topMargin = y_cord - 75;
img.setLayoutParams(layoutParams);
break;
default:
break;
}
return true;
}
});
}
}
移動するにはimageview
from 右から左 @Aritra Roy Answerの使用。
このコードを使用
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/linear_interpolator"
Android:fillAfter="true">
<translate
Android:fromXDelta="75%p"
Android:toXDelta="0%p"
Android:duration="100000" />
</set>