package me.xiaopan.sketchsample.fragment; import android.graphics.Color; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; import me.xiaopan.androidinjector.InjectContentView; import me.xiaopan.androidinjector.InjectView; import me.xiaopan.sketch.display.TransitionImageDisplayer; import me.xiaopan.sketch.process.MaskImageProcessor; import me.xiaopan.sketch.process.RotateImageProcessor; import me.xiaopan.sketch.process.RoundRectImageProcessor; import me.xiaopan.sketchsample.AssetImage; import me.xiaopan.sketchsample.MyFragment; import me.xiaopan.sketchsample.R; import me.xiaopan.sketchsample.widget.MyImageView; @InjectContentView(R.layout.fragment_wrapped) public class WrappedImageProcessorTestFragment extends MyFragment { @InjectView(R.id.image_wrappedFragment) MyImageView imageView; @InjectView(R.id.seekBar_wrappedFragment_width) SeekBar widthSeekBar; @InjectView(R.id.text_wrappedFragment_width) TextView widthProgressTextView; @InjectView(R.id.seekBar_wrappedFragment_height) SeekBar heightSeekBar; @InjectView(R.id.text_wrappedFragment_height) TextView heightProgressTextView; @InjectView(R.id.button_wrappedFragment) View rotateButton; private int roundRectRadiusProgress = 30; private int maskAlphaProgress = 45; private int rotateProgress = 45; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 缩小图片,处理速度更快,更少的内存消耗 DisplayMetrics metrics = getResources().getDisplayMetrics(); imageView.getOptions().setMaxSize(metrics.widthPixels / 2, metrics.heightPixels / 2); imageView.getOptions().setImageDisplayer(new TransitionImageDisplayer()); widthSeekBar.setMax(100); widthSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress < 20) { widthSeekBar.setProgress(20); return; } int width = (int) ((widthSeekBar.getProgress() / 100f) * 1000); widthProgressTextView.setText(String.format("%d/%d", width, 1000)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { roundRectRadiusProgress = widthSeekBar.getProgress(); apply(); } }); widthSeekBar.setProgress(roundRectRadiusProgress); heightSeekBar.setMax(100); heightSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress < 20) { heightSeekBar.setProgress(20); return; } int height = (int) ((heightSeekBar.getProgress() / 100f) * 1000); heightProgressTextView.setText(String.format("%d/%d", height, 1000)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { maskAlphaProgress = heightSeekBar.getProgress(); apply(); } }); heightSeekBar.setProgress(maskAlphaProgress); rotateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rotateProgress += 45; apply(); } }); apply(); } private void apply() { RoundRectImageProcessor roundRectImageProcessor = new RoundRectImageProcessor(roundRectRadiusProgress); RotateImageProcessor rotateImageProcessor = new RotateImageProcessor(rotateProgress, roundRectImageProcessor); int alpha = (int) (((float) maskAlphaProgress / 100) * 255); int maskColor = Color.argb(alpha, 0, 0, 0); imageView.getOptions().setImageProcessor(new MaskImageProcessor(maskColor, rotateImageProcessor)); imageView.displayImage(AssetImage.MEI_NV); } }