captchanojs2: set up view for each getView call

it's for when a view is given that you should recycle, it sets up the view
every time.
use viewpropertyanimator for animating the image and checkmark.
dev
Floens 6 years ago
parent f55d0ab3c3
commit aa27d1c3cb
  1. 22
      Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsV2Adapter.java
  2. 36
      Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java
  3. 5
      Clover/app/src/main/res/layout/layout_captcha_challenge_image.xml

@ -8,17 +8,15 @@ import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.BaseAdapter;
import org.floens.chan.R;
import org.floens.chan.utils.AndroidUtils;
import java.util.ArrayList;
import java.util.List;
public class CaptchaNoJsV2Adapter extends BaseAdapter {
private static final int ANIMATION_DURATION = 50;
private LayoutInflater inflater;
private int imageSize = 0;
@ -57,9 +55,13 @@ public class CaptchaNoJsV2Adapter extends BaseAdapter {
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.layout_captcha_challenge_image, parent, false);
}
AppCompatImageView imageView = convertView.findViewById(R.id.captcha_challenge_image);
imageView.setScaleX(1.0f);
imageView.setScaleY(1.0f);
ConstraintLayout blueCheckmarkHolder = convertView.findViewById(R.id.captcha_challenge_blue_checkmark_holder);
blueCheckmarkHolder.setAlpha(0.0f);
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(imageSize, imageSize);
imageView.setLayoutParams(layoutParams);
@ -70,14 +72,22 @@ public class CaptchaNoJsV2Adapter extends BaseAdapter {
imageList.get(position).toggleChecked();
boolean isChecked = imageList.get(position).isChecked;
AndroidUtils.animateViewScale(imageView, isChecked, ANIMATION_DURATION);
blueCheckmarkHolder.setVisibility(isChecked ? View.VISIBLE : View.GONE);
imageView.animate()
.scaleX(isChecked ? 0.8f : 1.0f)
.scaleY(isChecked ? 0.8f : 1.0f)
.setInterpolator(new DecelerateInterpolator(2.0f))
.setDuration(200)
.start();
blueCheckmarkHolder.animate()
.alpha(isChecked ? 1.0f : 0.0f)
.setInterpolator(new DecelerateInterpolator(2.0f))
.setDuration(200)
.start();
});
if (position >= 0 && position <= imageList.size()) {
imageView.setImageBitmap(imageList.get(position).getBitmap());
}
}
return convertView;
}

@ -51,8 +51,6 @@ import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import android.widget.Toast;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.ScaleAnimation;
import org.floens.chan.R;
@ -460,40 +458,6 @@ public class AndroidUtils {
return networkInfo != null && networkInfo.isConnected();
}
public static void animateViewScale(View view, boolean zoomOut, int duration) {
ScaleAnimation scaleAnimation;
final float normalScale = 1.0f;
final float zoomOutScale = 0.8f;
if (zoomOut) {
scaleAnimation = new ScaleAnimation(
normalScale,
zoomOutScale,
normalScale,
zoomOutScale,
ScaleAnimation.RELATIVE_TO_SELF,
0.5f,
ScaleAnimation.RELATIVE_TO_SELF,
0.5f);
} else {
scaleAnimation = new ScaleAnimation(
zoomOutScale,
normalScale,
zoomOutScale,
normalScale,
ScaleAnimation.RELATIVE_TO_SELF,
0.5f,
ScaleAnimation.RELATIVE_TO_SELF,
0.5f);
}
scaleAnimation.setDuration(duration);
scaleAnimation.setFillAfter(true);
scaleAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
view.startAnimation(scaleAnimation);
}
public static boolean enableHighEndAnimations() {
boolean lowRamDevice = ActivityManagerCompat.isLowRamDevice(activityManager);
return !lowRamDevice && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;

@ -2,7 +2,8 @@
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:padding="1dp">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/captcha_challenge_image"
@ -18,7 +19,7 @@
android:id="@+id/captcha_challenge_blue_checkmark_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:alpha="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"

Loading…
Cancel
Save