package com.wm.remusic.fragment; import android.animation.ObjectAnimator; import android.graphics.Color; import android.graphics.drawable.Animatable; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.LinearInterpolator; import com.facebook.common.logging.FLog; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.controller.BaseControllerListener; import com.facebook.drawee.controller.ControllerListener; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.generic.RoundingParams; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.image.ImageInfo; import com.facebook.imagepipeline.image.QualityInfo; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.wm.remusic.R; import java.lang.ref.WeakReference; /** * Created by wm on 2016/3/11. */ public class RoundFragment extends Fragment { private WeakReference<ObjectAnimator> animatorWeakReference; private SimpleDraweeView sdv; private long musicId = -1; private ObjectAnimator animator; private String albumPath; public static RoundFragment newInstance(String albumpath) { RoundFragment fragment = new RoundFragment(); Bundle bundle = new Bundle(); bundle.putString("album", albumpath); fragment.setArguments(bundle); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_roundimage, container, false); ((ViewGroup) rootView).setAnimationCacheEnabled(false); if (getArguments() != null) { albumPath = getArguments().getString("album"); } // CircleImageView circleImageView = (CircleImageView) rootView.findViewById(R.id.circle); sdv = (SimpleDraweeView) rootView.findViewById(R.id.sdv); //初始化圆角圆形参数对象 RoundingParams rp = new RoundingParams(); //设置图像是否为圆形 rp.setRoundAsCircle(true); //设置圆角半径 //rp.setCornersRadius(20); //分别设置左上角、右上角、左下角、右下角的圆角半径 //rp.setCornersRadii(20,25,30,35); //分别设置(前2个)左上角、(3、4)右上角、(5、6)左下角、(7、8)右下角的圆角半径 //rp.setCornersRadii(new float[]{20,25,30,35,40,45,50,55}); //设置边框颜色及其宽度 rp.setBorder(Color.BLACK, 6); //获取GenericDraweeHierarchy对象 GenericDraweeHierarchy hierarchy = GenericDraweeHierarchyBuilder.newInstance(getResources()) //设置圆形圆角参数 .setRoundingParams(rp) //设置圆角半径 //.setRoundingParams(RoundingParams.fromCornersRadius(20)) //分别设置左上角、右上角、左下角、右下角的圆角半径 //.setRoundingParams(RoundingParams.fromCornersRadii(20,25,30,35)) //分别设置(前2个)左上角、(3、4)右上角、(5、6)左下角、(7、8)右下角的圆角半径 //.setRoundingParams(RoundingParams.fromCornersRadii(new float[]{20,25,30,35,40,45,50,55})) //设置圆形圆角参数;RoundingParams.asCircle()是将图像设置成圆形 //.setRoundingParams(RoundingParams.asCircle()) //设置淡入淡出动画持续时间(单位:毫秒ms) .setFadeDuration(300) //构建 .build(); //设置Hierarchy sdv.setHierarchy(hierarchy); //Log.e("music id",musicId + ""); // String uri = MusicUtils.getAlbumdata(getContext().getApplicationContext(), musicId); // // if (musicId != -1 && uri != null) { // //circleImageView.setImageBitmap(bitmap); // //circleImageView.setImageURI(Uri.parse(uri)); // Uri ur = MusicUtils.getAlbumUri(getContext().getApplicationContext(), musicId); // sdv.setImageURI(ur); // } else { // // // circleImageView.setImageResource(R.drawable.placeholder_disk_play_song); // Uri urr = Uri.parse("res:/" + R.drawable.placeholder_disk_play_song); // sdv.setImageURI(urr); // } ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() { @Override public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable anim) { if (imageInfo == null) { return; } QualityInfo qualityInfo = imageInfo.getQualityInfo(); FLog.d("Final image received! " + "Size %d x %d", "Quality level %d, good enough: %s, full quality: %s", imageInfo.getWidth(), imageInfo.getHeight(), qualityInfo.getQuality(), qualityInfo.isOfGoodEnoughQuality(), qualityInfo.isOfFullQuality()); } @Override public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) { //FLog.d("Intermediate image received"); } @Override public void onFailure(String id, Throwable throwable) { sdv.setImageURI(Uri.parse("res:/" + R.drawable.placeholder_disk_play_song)); } }; if (albumPath == null) { sdv.setImageURI(Uri.parse("res:/" + R.drawable.placeholder_disk_play_song)); } else { try { ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(albumPath)).build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setOldController(sdv.getController()) .setImageRequest(request) .setControllerListener(controllerListener) .build(); sdv.setController(controller); // sdv.setImageBitmap(BitmapFactory.decodeStream(HttpUtil.getFromCache(getActivity(),getAlbumPath()))); } catch (Exception e) { e.printStackTrace(); } } return rootView; } @Override public void onStart() { super.onStart(); // animatorWeakReference = new WeakReference<ObjectAnimator>(new ObjectAnimator()); // animator = animatorWeakReference.get(); animatorWeakReference = new WeakReference(ObjectAnimator.ofFloat(getView(), "rotation", new float[]{0.0F, 360.0F})); animator = animatorWeakReference.get(); //animator = ObjectAnimator.ofFloat(getView(), "rotation", new float[]{0.0F, 360.0F}); animator.setRepeatCount(Integer.MAX_VALUE); animator.setDuration(25000L); animator.setInterpolator(new LinearInterpolator()); if (getView() != null) getView().setTag(R.id.tag_animator, this.animator); } @Override public void onResume() { super.onResume(); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { //相当于Fragment的onResume } else { //相当于Fragment的onPause } } @Override public void onDestroy() { super.onDestroy(); Log.e("roundfragment"," id = " + hashCode()); if (animator != null) { animator = null; Log.e("roundfragment"," id = " + hashCode() + " , animator destroy"); } // RefWatcher refWatcher = MainApplication.getRefWatcher(getActivity()); // refWatcher.watch(this); } }