2016-07-23 4 views
11

イメージを別のイメージの下に正しく収まるように回転しようとしています。ObjectAnimatorを使用してImageViewを時計回りに回転します。

What I am trying to achieve

そして、これは私が達成することができる午前です::だからこれは私が達成しようとしているものです

Currently achieved

それは基本的に一部を含む最初の1と2 ImageViewが含まれています床の上にはタイルを含む2つ目の床があります。

私の問題は、タイル画像を時計回りの方向にアニメーション化することができず、床の上の部分を含む画像の下に収まるように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" 
/> 
+0

エラーが表示されますか?まったく回転しているのですか、何も起こっていませんか? –

+0

私はあなたを取得しないでくださいより多くの詳細を – Elltz

+0

画像の違いを参照してください申し訳ありません...最初のものが欲しいと2番目のものが出力されます...彼は最初の画像として出力が必要 –

答えて

0

てみ単にだけでなく、私が発見した画像

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

イメージが希望の出力としてレイアウトされていません –

3

をロードした後このソリューションはオブジェクトアニメーターを削除し、代わりにこのコードを使用します

camera.save(); 

      camera.rotateX(790); 
      camera.rotateY(2.5f); 
      camera.rotateZ(140); 

      camera.translate(170,0, -8); 

      camera.getMatrix(matrix); 
      camera.restore(); 

カスタム画像クラスを作成し、applyTransformation()でこれを使用してください

関連する問題