Intereting Posts
Реагировать на родные андроидные переходы очень медленно Как я могу имитировать акселерометр в эмуляторе Android? Android-новичок: понимание действий MotionEvent Студия Android – Gradle – GitHub Repo Как оставаться подключенным к службе Android между несколькими действиями? Доверяйте всем сертификатам okHttp Включить / отключить масштабирование в Android WebView Как добавить параметры в HttpURLConnection с помощью POST Идентификатор регистрации становится «NotRegistered» без причины Зарегистрировать идентификатор устройства непосредственно с помощью Amazon SNS Передача данных из одной активности в другую с помощью пакета – не отображение во второй активности Сколько памяти должно использовать типичное приложение для Android? Android Studio: как создать горячую клавишу для очистки logcat? Проблемы с подключением к Интернету Как отобразить окно телефонных звонков при нажатии на телефонный номер телефона

Поворачивайте ImageView по часовой стрелке с помощью ObjectAnimator

Я пытаюсь повернуть изображение так, чтобы оно соответствовало правилу ниже другого изображения. Вот чего я пытаюсь достичь:

То, что я пытаюсь достичь

И это то, что я могу достичь:

В настоящее время

Он в основном содержит два ImageView первый из которых содержит часть над полом, а второй – плитки для покрытия пола.

Моя проблема в том, что я не могу анимировать изображение плитки по часовой стрелке, а также поворачивать представление вокруг оси x так, чтобы оно находилось ниже изображения, содержащего деталь над полом.

Я использую ObjectAnimator для анимации моего ImageView . Ниже мой код:

 public class VisualizerFragment extends Fragment { ImageView image; FlipImageView image_back; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); View view = inflater.inflate(R.layout.fragment_visualizer, container, false); image = (ImageView) view.findViewById(R.id.vs_image); image_back = (FlipImageView) view.findViewById(R.id.vs_image_back); Glide.with(getActivity()) .load(R.drawable.floor3) .centerCrop() .fitCenter() .listener(new RequestListener<Integer, GlideDrawable>() { @Override public boolean onException(Exception e, Integer model, Target<GlideDrawable> target, boolean isFirstResource) { return false; } @Override public boolean onResourceReady(GlideDrawable resource, Integer model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { Bitmap bmp = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.i9004); //crop image Matrix matrix = new Matrix(); matrix.postScale(1f, 1f); Bitmap croppedBitmap = Bitmap.createBitmap(bmp, 0, 0,100, 100, matrix, true); bmp = getRoundedCornerBitmap(croppedBitmap, getResources().getColor(R.color.line),0,1,getActivity()); BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); image_back.setDrawable(bitmapDrawable); image_back.setFlippedDrawable(bitmapDrawable); image_back.setFlipped(true); image_back.toggleFlip(); //rotate image ObjectAnimator anim = (ObjectAnimator) AnimatorInflater.loadAnimator(getActivity(), R.animator.fliping); anim.setTarget(image_back); anim.setDuration(100); anim.start(); return false; } }) .into(image); return view; } public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int color, int cornerDips, int borderDips, Context context) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int borderSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) borderDips, context.getResources().getDisplayMetrics()); final int cornerSizePx = 0; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); // prepare canvas for transfer paint.setAntiAlias(true); paint.setColor(0xFFFFFFFF); paint.setStyle(Paint.Style.FILL); canvas.drawARGB(0, 0, 0, 0); canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint); // draw bitmap paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); // draw border paint.setColor(color); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth((float) borderSizePx); canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint); return output; } } 

И ниже мой fliping.xml, используемый для анимации:

 <?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="rotationX" android:valueFrom="20" android:valueTo="50" android:valueType="floatType" /> 

Solutions Collecting From Web of "Поворачивайте ImageView по часовой стрелке с помощью ObjectAnimator"

Ну я нашел решение для этого …. удалить объект аниматор и вместо этого использовать этот код

 camera.save(); camera.rotateX(790); camera.rotateY(2.5f); camera.rotateZ(140); camera.translate(170,0, -8); camera.getMatrix(matrix); camera.restore(); 

Создайте свой собственный класс изображений и используйте его в applyTransformation ()

Попробуйте под кодом после загрузки изображения

  ObjectAnimator imageViewObjectAnimator = ObjectAnimator.ofFloat(imageview , "rotation", 20f, 50f); imageViewObjectAnimator.setDuration(1000); // miliseconds imageViewObjectAnimator.start();