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

来源:互联网 发布:淘宝店铺做淘宝客教程 编辑:程序博客网 时间:2024/06/09 21:46

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

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

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

    }
}




0 0
原创粉丝点击