Fügen Sie anzeigen, um constraintLayout mit Einschränkungen, ähnlich wie ein weiteres Kind
Ich habe eine Einschränkung layout (alpha9) mit Ansichten verbreiten alle über Sie, und ich habe eine Besondere Bildansicht, die ich brauche, um zu replizieren, und fügen Sie mehr, wie es.
Das layout ist wie folgt :
Zweck, zu animieren, 5 jener "Münze" imageViews, wenn die Taste gedrückt wird. Die imageViews ich muss generiert sha müssen die genauen Eigenschaften der Bildansicht hinter der Taste unten (mit denselben Einschränkungen)
Was ich versucht habe ist Folgendes :
private ImageView generateCoin() {
ImageView coin = new ImageView(this);
constraintLayout.addView(coin,-1,originCoinImage.getLayoutParams());//originCoinImage is the imageView behind the button
coin.setImageResource(R.drawable.ic_coin);
coin.setScaleType(ImageView.ScaleType.FIT_XY);
coin.setVisibility(View.VISIBLE);
return coin;
}
Und es ist fehlgeschlagen. EDIT: Es versäumt zu zeigen, was ich wollte , manchmal zeigt es eine Münze in der oberen linken Ecke des Bildschirms , und manchmal nicht alles zeigen, aber so oder so , die Anzahl der Münzen-Schritten (d.h. die animation versucht, um wirklich etwas zu tun und rufen dann den onAnimationFinished Methode)
Habe ich für die animation der Bibliothek EasyAndroidAnimations
der code ist wie folgt :
MainActivity.java
@OnClick(R.id.addCoin)
public void addCoin() {
// for (int x = 0 ; x < 5 ; x++){
final View newCoin = generateCoin();
sendCoin(newCoin, 300, new AnimationListener() {
@Override
public void onAnimationEnd(com.easyandroidanimations.library.Animation animation) {
incrementCoins();
constraintLayout.removeView(newCoin);
shakeCoin(targetCoinImage, 200, null);
}
});
// }
}
private void incrementCoins() {
coins++;
coinNumber.setText(String.valueOf(coins));
}
private void sendCoin(View coinView, long duration, AnimationListener listener) {
new TransferAnimation(coinView)
.setDestinationView(targetCoinImage)
.setDuration(duration)
.setInterpolator(new AccelerateDecelerateInterpolator())
.setListener(listener)
.animate();
}
private void shakeCoin(View coinView, long duration, AnimationListener listener) {
new ShakeAnimation(coinView)
.setDuration(duration)
.setShakeDistance(6f)
.setNumOfShakes(5)
.setListener(listener)
.animate();
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="seaskyways.canvasanddrawtest.MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="Coins : "
android:textSize="30sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/coinNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="16dp"
android:layout_marginStart="8dp"
android:text="0"
android:textColor="@color/colorPrimary"
android:textSize="50sp"
android:textStyle="normal|bold"
app:layout_constraintBottom_toBottomOf="@+id/textView"
app:layout_constraintLeft_toRightOf="@+id/textView"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView" />
<ImageView
android:id="@+id/coinOrigin"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="@+id/addCoin"
app:layout_constraintLeft_toLeftOf="@+id/addCoin"
app:layout_constraintTop_toTopOf="@+id/addCoin"
app:srcCompat="@drawable/ic_coin"
app:layout_constraintRight_toRightOf="@+id/addCoin" />
<ImageView
android:id="@+id/coinTarget"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="@+id/coinNumber"
app:layout_constraintLeft_toRightOf="@+id/coinNumber"
app:layout_constraintTop_toTopOf="@+id/coinNumber"
app:srcCompat="@drawable/ic_coin" />
<Button
android:id="@+id/addCoin"
android:layout_width="0dp"
android:layout_height="75dp"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:text="Button"
android:textAlignment="center"
android:textSize="36sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>
Wenn ich das richtig verstehe, wollen Sie die Münze, um zu gehen von unten-Taste, um die oberste Münze und wenn die animation beendet ist, wird die Anzahl der Münzen erhöhen um eins. So dass Sie wollen, erhöhen Sie durch fünf, was bedeutet, dass 5 der Münzen, die animiert werden soll, von der unteren zu der oberen Münze. Bin ich in der Nähe?
Genau das, was ich will , allerdings soll ich tun es mit einer Münze , dann eine million, wird keinen Unterschied machen, @mihanovak1024
So soll sich die animation nur gehen senkrecht nach oben? Oder muss es verschieben oder so was? Welche animation hast du im Sinn? Wird eine einfache TranslateAnimation tun?
es geht nicht um die animation , es geht um die Bildansicht wird direkt programmgesteuert
InformationsquelleAutor Seaskyways | 2016-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
ConstraintLayout.LayoutParams
cache-Parameter und ist damit für das widget, das Sie verwenden, so können Sie sich nicht einfach ein widget ist layoutParams zu einem anderen.Müssen Sie stattdessen erzeugen Sie eine neue layoutParams für Ihr neues Objekt, und kopieren Sie die entsprechenden Felder.
Zum Beispiel, wenn Sie so etwas wie:
Dann könnten Sie tun:
Das würde die zweite Taste genau an der gleichen Stelle wie der eine im XML-Format definiert.
Anyway, ich danke Ihnen. Implementiere ich es durch die folgende Weise: val screenshotViewLayoutParams = ConstraintLayout.LayoutParams(cl.Breite, cl.Höhe) screenshotView.layoutParams = screenshotViewLayoutParams cs.connect(screenshotView.id, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, cl.x.toInt()) cs.connect(screenshotView.id, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.SPITZE, cl.y.toInt())
InformationsquelleAutor Nicolas Roard