您的位置:首页 > 移动开发 > Android开发

android圆形图片的获取与图片绕中心旋转

2015-08-04 19:30 471 查看
这是我第一篇博客,写得比较简单,望大家见谅。这篇博客主要介绍如何对图片进行处理变为图形图片,并使得图片绕中心旋转。效果图如下


首先是图形图片的获取方法,代码如下:

private Bitmap getCircularBitmap(Bitmap bitmap, int radius) {

        Bitmap sbmp = Bitmap.createScaledBitmap(bitmap, radius, radius, false);

        Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(),

                Config.ARGB_8888);

        Canvas canvas = new Canvas(output);

        Paint paint = new Paint();

        Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());

        paint.setAntiAlias(true);

        paint.setFilterBitmap(true);

        paint.setDither(true);

        canvas.drawARGB(0, 0, 0, 0);

        paint.setColor(Color.BLACK);

        canvas.drawCircle(sbmp.getWidth() / 2, sbmp.getHeight() / 2,

                sbmp.getWidth() / 2, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

        canvas.drawBitmap(sbmp, rect, rect, paint);

        return output;

    }

返回的是一张圆形的图片。下面是自定义的MyView类,对获取的图片进行处理,使图片绕中心旋转。代码如下:

public class MyView extends View {

    private Bitmap bitmap1;

    private Bitmap bitmap2;

    private int degree = 0;// 扳手图像的当前角度

    static boolean flag = false;

    Handler handler;

    // 视图的宽高

    WindowManager wm = (WindowManager) getContext().getSystemService(

            Context.WINDOW_SERVICE);

    int viewWidth = wm.getDefaultDisplay().getWidth();

    BitmapDrawable myImage;

    public MyView(Context context) {

        super(context);

        setBackgroundColor(Color.WHITE);

        bitmap1 = BitmapFactory.decodeResource(getResources(),

                R.drawable.music_play_people);

        bitmap2 = getCircularBitmap(bitmap1, 200);

        myImage = new BitmapDrawable(bitmap2);

        

        handler = new Handler();

        handler.post(runnable);

    }

    private Runnable runnable = new Runnable() {

        public void run() {

            if (flag) {

                postInvalidate();

            }

            handler.postDelayed(runnable, 50);

        }

    };

    @Override

    protected void onDraw(Canvas canvas) {

        int width = bitmap2.getWidth();

        int height = bitmap2.getHeight();

        // 控制旋转角度在0-360之间

        degree ++;

        if (degree > 360)

            degree = 0;

        // 设置扳手图像的旋转角度和旋转轴心坐标(后两个参数,注意这个坐标是相对于屏幕的),该轴心也是图像的正中心

        canvas.save();

        canvas.rotate(degree, viewWidth / 3 - 45, 200);

        myImage.setBounds(viewWidth / 3 - width - 45, 200 - height, viewWidth

                / 3 + width - 45, 200 + height);

        myImage.draw(canvas);

        canvas.restore();

    }

}

在MainActivity中加载MyView对象,主activity代码如下:

public class MainActivity extends Activity {

    private Button start, stop;

    private RelativeLayout re;

    private MyView view;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        re = (RelativeLayout) findViewById(R.id.my_image);

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(

                RelativeLayout.LayoutParams.MATCH_PARENT,

                RelativeLayout.LayoutParams.WRAP_CONTENT);

        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);

        view = new MyView(this);

        view.setLayoutParams(layoutParams);

        re.addView(view);

        start = (Button) findViewById(R.id.start);

        stop = (Button) findViewById(R.id.end);

        start.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                MyView.flag = true;

            }

        });

        stop.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                MyView.flag = false;

            }

        });

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: