`
Weich_JavaDeveloper
  • 浏览: 100263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ImageView 自适应手机屏幕 + 旋转

 
阅读更多

Chart.java

public class Chart extends VLinearLayout implements BaseView{

	private Activity context;

	private ImageView m_ImageView;

	private Bitmap img;

	private int ScaleAngle = 0; 

	private Button turnLeft,turnRight;

	private HLinearLayout B_LinearLayout;

	private int[] WindowXY = new int[2];

	public Chart(Activity context) {
		super(context);
		this.context = context;
		m_ImageView = new ImageView(context);
		DisplayMetrics dm = new DisplayMetrics();
		context.getWindowManager().getDefaultDisplay().getMetrics(dm);
		WindowXY[0] = dm.widthPixels;
		WindowXY[1] = dm.heightPixels;
		B_LinearLayout = new HLinearLayout(context);
		turnLeft = new Button(context);
		turnLeft.setText("左转");
		turnRight = new Button(context);
		turnRight.setText("右转");
		turnLeft.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {turnLeft();}
		});
		turnRight.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {turnRight();}
		});
		B_LinearLayout.addView(turnLeft);
		turnLeft.setPadding(10, 5, 10, 5);
		B_LinearLayout.addView(turnRight);
		turnRight.setPadding(10, 5, 10, 5);
		this.addView(B_LinearLayout);
		this.addView(m_ImageView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
	}

	public void turnLeft(){

		ScaleAngle--; 
		int bmpWidth = img.getWidth();
		int bmpHeight = img.getHeight();
		Matrix matrix = new Matrix(); 
		matrix.setRotate( 90 * ScaleAngle); 
		Bitmap newBit = Bitmap.createBitmap(img, 0, 0, bmpWidth, bmpHeight, matrix, true);
		m_ImageView.setImageBitmap(newBit);
	}

	public void turnRight(){

		ScaleAngle++; 
		int bmpWidth = img.getWidth();
		int bmpHeight = img.getHeight(); 
		Matrix matrix = new Matrix(); 
		matrix.setRotate( 90 * ScaleAngle); 
		Bitmap newBit = Bitmap.createBitmap(img, 0, 0, bmpWidth, bmpHeight, matrix, true);
		m_ImageView.setImageBitmap(newBit);
	}

	public void setImage(String param){
		if (param == null || param.equals("")){
			Log.v("default", "image");
			try {
				img = BitmapFactory.decodeStream(context.getResources().getAssets().open("test.png"));
			} catch (IOException e) {
				Log.e("读取Assets下图片资源失败!", e.getMessage(), e);
			}
		}else{

			if (param.startsWith("/")) {
				img = BitmapFactory.decodeStream(ImageUtil.class.getResourceAsStream(param));
			} else if (param.startsWith("res-img:")) {
				try {
					img = BitmapFactory.decodeStream(context.getResources().getAssets().open(param.substring(8)));
				} catch (IOException e) {
					Log.e("读取Assets下图片资源失败!", e.getMessage(), e);
				}
			} else if (param.startsWith("stream:")) {
				String s = param.substring(7);
				img = BitmapFactory.decodeStream(new java.io.ByteArrayInputStream(StringUtil.fromBase64(s)));
			}
		}
		
		int bmpWidth = img.getWidth();
		int bmpHeight = img.getHeight();
		Log.v("base", bmpWidth+"");
		Log.v("base", bmpHeight+"");
		if(bmpWidth < WindowXY[0] && bmpHeight < WindowXY[1]){
			Matrix matrix = new Matrix(); 
			float one = (float)WindowXY[0]/bmpWidth;
			float two = (float)WindowXY[1]/bmpHeight;
			Log.v("one", one+"");
			Log.v("two", two+"");
			if(one < two){
				Log.v("one", one+"");
				matrix.postScale(one, one);
			}else{
				Log.v("two", two+"");
				matrix.postScale(two, two);
			}
			img = Bitmap.createBitmap(img, 0, 0, bmpWidth, bmpHeight, matrix, true);
		}
		m_ImageView.setImageBitmap(img);

	}

	@Override
	public String getValue() {
		return null;
	}

	@Override
	public void setValue(String text) {

	}

	@Override
	public View getView() {
		return this;
	}
}
 
分享到:
评论

相关推荐

    Android源码——ImageView控件缩放和旋转图片源码.zip

    当ImageView加载Bitmap时,会根据控件的大小和Bitmap的原始尺寸进行调整,以适应屏幕空间。这个过程涉及到了缩放操作。 缩放图片主要通过Matrix类来实现。Matrix是一个二维变换矩阵,可以执行平移、旋转、缩放等...

    iOS中实现imageView任意角度旋转的方法

    在处理自适应缩放显示时,可以使用以下代码: ```swift // 对于Retina屏幕 _detailImageView.contentMode = .scaleAspectFit // 保持比例填充,多余部分裁剪 _detailImageView.contentScaleFactor = UIScreen.main....

    android 瀑布流

    - `StaggeredGridLayoutManager`允许在运行时改变列数,所以可以在初始化时或者屏幕旋转时动态调整。 - 考虑到不同的屏幕密度,使用dp单位进行布局设计,并在必要时进行像素转换。 4. **DodoWaterFall**: - 这...

    安卓完美屏幕适配 百分比布局库

    - 注意在使用时,百分比布局仅适用于垂直和水平方向的尺寸调整,对于旋转或倾斜等复杂布局可能不适用。 - 虽然百分比布局库非常实用,但在某些情况下可能仍需结合其他适配策略,如使用`dimen.xml`资源文件进行尺寸...

    Android代码-Android图片浏览全屏缩放.zip

    在全屏显示图片时,通常会设置ImageView的宽高为屏幕的宽高,使用`match_parent`属性。 2. **图片加载库**:在实际开发中,单纯使用ImageView可能无法满足高性能的需求,如内存管理和异步加载。常见的图片加载库有...

    手机UI例程

    例如线性布局(LinearLayout)、相对布局(RelativeLayout)和网格布局(GridLayout)用于组织屏幕元素,按钮(Button)、文本框(EditText)和图像视图(ImageView)等控件用于用户交互。 3. **XML布局文件**:在...

    仿快手编辑视频页面添加贴纸和文字,有移动、旋转、放大、文字大小自动适应的功能

    对于贴纸,我们可以使用`ImageView`或者`UIImageView`来加载和显示图片,同时提供平移和旋转的功能。平移可以通过监听触摸事件并更新视图的位置来实现,旋转则可以借助`Matrix`(Android)或`CGAffineTransform`...

    6-绘图1

    9patch图片是一种特殊的PNG格式,允许开发者指定图像的拉伸区域和不变区域,以适应不同尺寸的屏幕,特别适用于制作可自适应的背景图或按钮。 2. **动画 Animation 的使用** - **Tween Animation**:变换动画,...

    Android 开发技巧新整理.pdf

    - 如何实现自适应屏幕的布局设计。 - 视图的旋转(rotate)、缩放、透明度控制等动画效果。 - 布局文件优化、性能提升技巧。 3. 数据存储与管理: - 如何利用SharedPreferences进行轻量级数据存储。 - 使用SQLite...

    android 圆环菜单

    这可能涉及到布局参数的动态调整,以及在配置变更时(如屏幕旋转)保存和恢复状态。 在实现过程中,我们还应关注性能优化。避免过度绘制,合理使用硬件加速,以及适时地复用和回收资源,都是提高应用流畅度和效率的...

    Android应用源码之MyImageView1.zip

    6. **自适应布局**:根据屏幕尺寸和方向自动调整图片大小和位置,实现响应式设计。 7. **点击事件处理**:可能增加了点击事件监听,提供了更丰富的用户交互。 8. **自定义属性**:可能通过使用Android的属性系统...

    温度计 风向 指南针 自定义View的高度结合 适用于不同分辨率的手机

    5. **适配不同分辨率的手机**: 在Android开发中,为了确保自定义View在不同屏幕尺寸和分辨率的设备上都能正常显示,需要考虑尺寸的相对性和密度独立像素(dp)的概念。使用布局权重、百分比布局或者自适应尺寸的计算...

    roundImage(自定义圆形图片)

    5. **响应尺寸变化**:为了适应界面动态变化,如屏幕旋转或视图大小调整,可能需要在`layoutSubviews`方法中重新计算并设置cornerRadius和遮罩层的半径。 6. **性能优化**:在处理大量图片时,为避免性能问题,...

    Android 图片浏览功能简单实现(画廊效果实现,支持放大缩小)

    对于不同分辨率和屏幕大小的设备,使用`PercentRelativeLayout`或`ConstraintLayout`可以实现自适应布局,确保图片在各种设备上都能正确显示。 通过以上知识点的综合运用,我们可以构建一个基本的图片浏览功能,...

    android FlipImageView源码.rar

    3. 自适应屏幕:确保翻转效果在不同分辨率和屏幕方向下表现一致。 通过理解并运用FlipImageView的源码,开发者可以更灵活地定制和控制翻转动画,提升Android应用的交互性和趣味性。同时,这也为学习和研究Android...

    仿头条图片查看器

    6.2. 响应式布局:利用百分比布局或者FlexboxLayout等,实现图片在不同屏幕尺寸上的自适应。 七、用户体验提升 7.1. 载入指示器:在图片加载过程中显示加载进度,告知用户当前状态。 7.2. 错误处理:当图片加载...

    android图片简单编辑

    - 自定义`View`:若需要更复杂的显示效果,如自适应大小、手势缩放等,可以自定义`View`继承`ImageView`,重写`onDraw()`方法。 3. **图像编辑**: - **缩放**:使用`Matrix`类进行图像缩放,通过设置`Matrix....

    安卓开发应用图片

    这种图片在边缘有额外的标记,指示哪些区域可以拉伸,哪些区域保持不变,常用于按钮、背景等需要自适应形状的元素。 6. 动画序列帧: 对于动画效果,可以使用多个静态图片组成一个序列,通过AnimationDrawable或者...

Global site tag (gtag.js) - Google Analytics