您当前的位置: 首页 >  宴西笔记 ide

AIDE 画布显示图片任意 拖动 缩放

宴西笔记 发布时间:2022-03-07 11:58:41 ,浏览量:3

/storage/emulated/0/AppProjects/Tusegj/app/src/main/ AndroidManifest.xml



	
	
    
	
    
        
        
            
                
                
                
            
        
        
    

/storage/emulated/0/AppProjects/Tusegj/app/src/main/java/com/tsgj/ts/ MainActivity.java

package com.tsgj.ts;

import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import android.graphics.*;
import android.view.View.*;
import android.view.*;
import android.content.*;
import android.net.*;
import android.util.*;
import android.provider.*;
import android.database.*;
import java.io.*;
import android.webkit.*;
import android.os.*;
import androidx.appcompat.app.*;
import androidx.core.app.*;
import android.content.pm.*;

public class MainActivity extends AppCompatActivity
{
    private ClockView hb;
	private Button openImageBn;           //打开图片
	private Bitmap img;                   //原始图片
	private TextView pathText;          //路径TextView
	private String path;                  //存储图片路径
	private ImageView imageShow;          //显示图片
	private final int IMAGE_CODE = 0;     //打开图片
    //触屏缩放图片
	private static final int NONE = 0;     //初始状态
	private static final int DRAG = 1;     //拖动
	private static final int ZOOM = 2;     //缩放
	private int mode = NONE;               //当前事件
	private float oldDist;
	private PointF startPoint = new PointF();
	private PointF middlePoint = new PointF();
	private Matrix matrix = new Matrix();
	private Matrix savedMatrix = new Matrix();

	@Override
    protected void onCreate(Bundle savedInstanceState)
	{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		sqqx(this);
		openImageBn = findViewById(R.id.button1);
		pathText = findViewById(R.id.textView1);
		hb = findViewById(R.id.hb);

		//打开图片
		openImageBn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v)
				{
					Intent intent = new Intent(Intent.ACTION_PICK, 
											   android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
					startActivityForResult(intent, IMAGE_CODE);
				}
			});

		//触屏缩放图片监听 注:XML中修改android:scaleType="matrix"
		hb.setOnTouchListener(new View.OnTouchListener() {
				@Override
				public boolean onTouch(View v, MotionEvent event)
				{
					switch (event.getAction() & MotionEvent.ACTION_MASK)
					{
						case MotionEvent.ACTION_DOWN: //手指按下
							savedMatrix.set(matrix);
							startPoint.set(event.getX(), event.getY());
							mode = DRAG;
							break;
						case MotionEvent.ACTION_UP:
							pathText.setText(middlePoint+"\n"+startPoint+"\n"+matrix+"\n缩放 "+ZOOM+"\n拖动 "+DRAG);
						case MotionEvent.ACTION_POINTER_UP:
							mode = NONE;
							break;
						case MotionEvent.ACTION_POINTER_DOWN:
							oldDist = spacing(event); //如果两点距离大于10 多点模式
							if (oldDist > 10f)
							{
								savedMatrix.set(matrix);
								midPoint(middlePoint, event);
								mode = ZOOM;
							}
							break;
						case MotionEvent.ACTION_MOVE:
							if (mode == DRAG)
							{ //拖动
								matrix.set(savedMatrix);
								matrix.postTranslate(event.getX() - startPoint.x, event.getY() - startPoint.y);
							}
							else if (mode == ZOOM)
							{ //缩放
								float newDist = spacing(event);
								if (newDist > 10f)
								{
									matrix.set(savedMatrix);
									float scale = newDist / oldDist;
									matrix.postScale(scale, scale, middlePoint.x, middlePoint.y);
								}
							}
							break;
					} 
					hb.aa(matrix);
					hb.onClick(hb);
					return true;
				}
				//两点距离
				private float spacing(MotionEvent event)
				{
					float x = event.getX(0) - event.getX(1);
					float y = event.getY(0) - event.getY(1);
					return (x * x + y * y);
				}
				//两点中点
				private void midPoint(PointF point, MotionEvent event)
				{
					float x = event.getX(0) + event.getX(1);
					float y = event.getY(0) + event.getY(1);
					point.set(x / 2, y / 2);
				}
			});

	}
	//监听是否是当前界面 获取图片路径
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{ 
		super.onActivityResult(requestCode, resultCode, data);  
	    if (resultCode == RESULT_OK && requestCode == IMAGE_CODE)
		{  

			Uri imageFileUri = data.getData();
			//显示文件路径
			String[] filePathColumn= {MediaStore.Images.Media.DATA};
			Cursor cursor = getContentResolver().query(imageFileUri, filePathColumn, null, null, null);
			cursor.moveToFirst(); //将光标移至开头
			int columnIndex = cursor.getColumnIndex(filePathColumn[0]); //获得用户选择图片的索引
			path = cursor.getString(columnIndex);
			cursor.close();
			//获取路径图片
			dutupian(path);
			//传递图片到画布
			hb.aa(img);
			//更新画布
			hb.onClick(hb);
			
		}   
	}
    public void dutupian(String pathString)
	{
		File file = new File(pathString);
        Bitmap bitmap=null;
		if (file.exists())

		{
			bitmap = BitmapFactory.decodeFile(pathString);
		}
		img=bitmap;
	}
    //申请存储权限
	private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
		"android.permission.READ_EXTERNAL_STORAGE",
		"android.permission.WRITE_EXTERNAL_STORAGE" };
    public static void sqqx(Activity activity)
	{
        try
		{
			//检测是否有写的权限
            int permission = ActivityCompat.checkSelfPermission(activity,									"android.permission.WRITE_EXTERNAL_STORAGE");
            if (permission != PackageManager.PERMISSION_GRANTED)
			{
				// 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
            }
        }
		catch (Exception e)
		{
            e.printStackTrace();
        }
    }
}

/storage/emulated/0/AppProjects/Tusegj/app/src/main/java/com/tsgj/ts/ ClockView.java

package com.tsgj.ts;
import android.view.*;
import android.view.View.*;
import android.graphics.*;
import android.content.*;
import android.util.*;

public class ClockView extends View implements OnClickListener {  
	  
	    private Paint mPaint;  
	    private Matrix matrix = new Matrix();
	    private Rect mBounds;  
	    private Bitmap img;
	    private int mCount;
	    private int sz=1;
	    public ClockView(Context context, AttributeSet attrs) {  
		        super(context, attrs);  
		        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
		        mBounds = new Rect();  
		        setOnClickListener(this);  
	    }  
	  
	    @Override  
	    protected void onDraw(Canvas canvas) {  
		        super.onDraw(canvas);  
		        mPaint.setColor(Color.BLUE);  
		        canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);  
		        mPaint.setColor(Color.YELLOW);  
		        mPaint.setTextSize(30);  
		        String text = String.valueOf(mCount);  
		        mPaint.getTextBounds(text, 0, text.length(), mBounds);  
		        float textWidth = mBounds.width();  
		        float textHeight = mBounds.height();  
		        canvas.drawText(text, getWidth() / 2 - textWidth / 2, getHeight() / 2  
						                + textHeight / 2, mPaint);
				canvas.setMatrix(matrix);
				if(img!=null){
				  canvas.drawBitmap(img,0,0,mPaint);
				}
				canvas.setMatrix(new Matrix());
				
	    }  
	  
	    @Override  
	    public void onClick(View v) {  
		        mCount+=sz;
		        invalidate();  
	    }
		public void aa(int a){
			sz=a;
		}
	    public void aa(Bitmap a){
			img=a;
		}
		public void aa(Matrix a){
			matrix=a;
		}
}  

QQ群 647162429

关注
打赏
1688896170
查看更多评论

宴西笔记

暂无认证

  • 3浏览

    0关注

    82博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0396s