android實(shí)現(xiàn)拖拽裁剪功能
本文實(shí)例為大家分享了android拖拽框,裁剪出圖片的具體代碼,供大家參考,具體內(nèi)容如下

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>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)拍照、選擇圖片并裁剪圖片功能
- Android裁剪圖片為圓形圖片的實(shí)現(xiàn)原理與代碼
- 解決Android從相冊(cè)中獲取圖片出錯(cuò)圖片卻無(wú)法裁剪問(wèn)題的方法
- Android實(shí)現(xiàn)從本地圖庫(kù)/相機(jī)拍照后裁剪圖片并設(shè)置頭像
- Android 7.0中拍照和圖片裁剪適配的問(wèn)題詳解
- Android自定義View實(shí)現(xiàn)照片裁剪框與照片裁剪功能
- Android實(shí)現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理)
- Android編程實(shí)現(xiàn)調(diào)用系統(tǒng)圖庫(kù)與裁剪圖片功能
- Android拍照或從圖庫(kù)選擇圖片并裁剪
- Android圖片裁剪功能實(shí)現(xiàn)代碼
相關(guān)文章
android 仿QQ動(dòng)態(tài)背景、視頻背景的示例代碼
本篇文章主要介紹了android 仿QQ動(dòng)態(tài)背景、視頻背景的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Android開(kāi)發(fā)中ImageLoder加載網(wǎng)絡(luò)圖片時(shí)將圖片設(shè)置為ImageView背景的方法
這篇文章主要介紹了Android開(kāi)發(fā)中ImageLoder加載網(wǎng)絡(luò)圖片時(shí)將圖片設(shè)置為ImageView背景的方法,涉及Android ImageView圖片加載及背景設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Android亮度調(diào)節(jié)的幾種實(shí)現(xiàn)方法
本篇文章詳細(xì)介紹了Android亮度調(diào)節(jié)的幾種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android浮動(dòng)窗口實(shí)現(xiàn)原理及代碼實(shí)例
這篇文章主要介紹了Android浮動(dòng)窗口實(shí)現(xiàn)原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Flutter StaggeredGridView實(shí)現(xiàn)瀑布流效果
這篇文章主要為大家詳細(xì)介紹了Flutter StaggeredGridView實(shí)現(xiàn)瀑布流效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Android富文本實(shí)現(xiàn)的幾種方式匯總
由于項(xiàng)目中需要使用到富文本顯示和編輯,索性整理下,這篇文章主要給大家介紹了關(guān)于Android富文本實(shí)現(xiàn)的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
Android和iOS 測(cè)試五個(gè)最好的開(kāi)源自動(dòng)化工具
本文主要介紹Android和iOS 五個(gè)最好的開(kāi)源自動(dòng)化工具,這里整理了相關(guān)資料,希望能幫助測(cè)試軟件的朋友,有需要的看下2016-09-09

