2016-07-23 41 views
11

kullanarak saat yönünde bir ImageView döndürün. Öyleyse bu, başarmak için çalışıyorum budur:Ben düzgün başka Image altında sığacak şekilde Görüntü döndürmek çalışıyorum ObjectAnimator

What I am trying to achieve

Ve bu elde etmek mümkün buyum: Temelde kısmını içeren ilkinden iki ImageView içeren

Currently achieved

zemini ve ikincisi ise zemini kaplamak için fayansları içerir.

My Sorun bu yerden bir kısmını içeren görüntü altında uygun şekilde, x ekseni etrafında görünümü döndürmek yanı sıra saat yönünde fayans görüntü animasyon kuramıyorum olmasıdır.

benim ImageView animasyon uygulamak için ObjectAnimator kullanıyorum. Aşağıda

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; 
} 
} 

Ve animasyon için kullanılan benim fliping.xml edilir: basitçe görüntüyü yükledikten sonra kodunun altına

<?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

bir hata alıyorsunuz? Hiç dönüyor mu, yoksa hiçbir şey olmuyor mu? –

+0

seni alamadım lütfen üzgünüm görüntülerde daha fazla – Elltz

+0

bkz farkını ayrıntılı olabilir .... o ilk görüntü olarak çıktıya ihtiyaç ... İlki istenen ve ikinci bir çıkışı –

cevap

0

Try

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

hiçbir resim istenen çıktıda değil –

3

iyi buldum Aşağıda benim kodudur Bunun için bir çözüm .... nesne animatör kaldırmak ve bunun yerine bu kodu

camera.save(); 

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

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

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

özel görüntü sınıfı oluşturmak ve applyTransformation bu kullanmak()