android 拖拽裁剪

来源:互联网 发布:mac os 10.10 u盘安装 编辑:程序博客网 时间:2024/05/04 14:45

android 拖拽框,裁剪出图片


import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.RelativeLayout;import eebochina.com.testsomething.R;public class DragTakePhoto extends AppCompatActivity implements View.OnTouchListener {    ImageView takePhoto;    ImageView takeImage;    Button mButton;    static final String tag = "takePhoto";    RelativeLayout.LayoutParams mLayoutParams;    int left, top, bottom, right;    int x, y;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_drag_take_photo);        takePhoto = (ImageView) findViewById(R.id.take_layout);        takeImage = (ImageView) findViewById(R.id.take_image);        mButton = (Button) findViewById(R.id.take_crop);        takePhoto.setOnTouchListener(this);        takePhoto.post(new Runnable() {            @Override            public void run() {                Log.d(tag, "" + takePhoto.getX() + "  ," + takePhoto.getY() + " :" + takePhoto.getPivotX() + " " + takePhoto.getPivotY());            }        });        mLayoutParams = (RelativeLayout.LayoutParams) takePhoto.getLayoutParams();        final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.take);        mButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                float wd = (bitmap.getWidth() * 10000 / takeImage.getWidth()) / 10000f;                float hd = (bitmap.getHeight() * 10000 / takeImage.getHeight()) / 10000f;                Bitmap bitmap1 = Bitmap.createBitmap(bitmap, (int) (takePhoto.getX() * wd), (int) (takePhoto.getY() * hd), (int) (takePhoto.getWidth() * wd), (int) (takePhoto.getHeight() * hd));                takePhoto.setImageBitmap(bitmap1);            }        });    }    @Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) takeImage.getLayoutParams();        left = layoutParams.leftMargin;        top = layoutParams.topMargin;        right = takeImage.getWidth() - left - takePhoto.getWidth();        bottom = takeImage.getHeight() - top - takePhoto.getHeight();    }    @Override    public boolean onTouch(View view, MotionEvent motionEvent) {        switch (motionEvent.getAction()) {            case MotionEvent.ACTION_DOWN:                x = (int) motionEvent.getRawX() - mLayoutParams.leftMargin;                y = (int) motionEvent.getRawY() - mLayoutParams.topMargin;                break;            case MotionEvent.ACTION_MOVE:                int movex = (int) (motionEvent.getRawX() - x);                int movey = (int) (motionEvent.getRawY() - y);                Log.d(tag, "x:" + movex + "  y:" + movey);                if (movex < left) movex = left;                if (movey < top) movey = top;                if (movex > right) movex = right;                if (movey > bottom) movey = bottom;                mLayoutParams.leftMargin = movex;                mLayoutParams.topMargin = movey;                takePhoto.setLayoutParams(mLayoutParams);                break;        }        takePhoto.invalidate();        return true;    }}


布局文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="eebochina.com.testsomething.dragTake.DragTakePhoto">    <ImageView        android:id="@+id/take_image"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/take"        android:layout_marginBottom="50dp"        />    <ImageView        android:id="@+id/take_layout"        android:layout_width="200dp"        android:layout_height="40dp"        android:layout_marginRight="10dp"        android:layout_marginLeft="10dp"        android:background="@android:color/holo_blue_dark"        />    <Button        android:id="@+id/take_crop"        android:layout_width="200dp"        android:layout_height="40dp"        android:background="@android:color/holo_blue_dark"        android:text="裁剪"        android:layout_centerHorizontal="true"        android:layout_alignParentBottom="true"        /></RelativeLayout>


代码很少,以后有时间再添加更好的体验 

0 0
原创粉丝点击