Android 在代码中设置imageview的大小和位置(满足单方向的放大缩小和任意位置的移动)
2017-12-29 09:44
691 查看
许久以前,在我还是初中的时候,有过一个当网络小说家的梦想,谁知到如今,却成一个程序员。享受生活,享受现在,做一个写博客的程序员,也算是了却当初的半个梦想。
---萧洛
本博客分三部分讲解,1.在Java文件中添加imageview和设置大小 2.在Java文件中设置imageview的位置,3.在Java文件中控制imageview的大小。
1.在Java文件中添加imageview
1.1 布局文件
1.2 Java文件
在onclick()的逻辑大概如下所述,新建一个imageview控件,设置图片,创建一个线性布局参数容纳imageview,设置图片的背景颜色,最后把imageview添加进相对布局。这里设置imageview的背景颜色,是为了在仿真的时候,可以清楚imageview控件的实际大小。
1.3 仿真结果
2.在Java文件中设置图片的位置
2.1 Java文件(布局文件无需改变)
2.2 仿真结果
还是可以很轻易看出结果的变化的。
3.在Java文件中控件图片的单方向的放大
这个才是本文的重点,也是目前网上,很难找到参考资料的。
3.1 Java文件
好啦,终于到了最激动人心的时刻! 上述代码中,设置的是将imageview横向放大,所以将固定长度400的宽度,设置成了wrap-content。要放大自然不能固定大小!上文中我们说到,控制控件在父布局中的位置的时候,不需要设置右和下的距离,1是因为既然设置左和上的距离就能控制位置,就无需多次一举,2是设置错了的话,会改变图片的大小。父控件总的宽度-控件到父控件左边的距离-右边的距离=控件的宽度!!
对的,就是这么简单,利用这个原理就可以轻松实现了图片的单方向放大。至此,相信你也应该明白,为啥要设置图片充满布局了吧!
3.2 仿真结果
好啦,至此为止,第一篇博客算是写完了。 如果你感觉确实有用,麻烦给点鼓励,点个赞!remember 萧洛!
---萧洛
本博客分三部分讲解,1.在Java文件中添加imageview和设置大小 2.在Java文件中设置imageview的位置,3.在Java文件中控制imageview的大小。
1.在Java文件中添加imageview
1.1 布局文件
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.imageview_location_largeandnarrow.MainActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fadingEdge="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearlayout" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/add_imageview" android:text="addImageview" android:textAllCaps="false" android:layout_gravity="center" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/relativelayout_addimageview"> </RelativeLayout> </LinearLayout> </LinearLayout> </ScrollView> </android.support.constraint.ConstraintLayout>简单讲解一下,这个布局文件,是在相对布局中添加imageview,读者也可以改为在线性布局中添加,两者的效果完全不一样,感兴趣的可以尝试一下,本文是基于在相对布局下写的。另外在设置button居中的时候,需要设置LinearLayout方向为垂直才会生效。
1.2 Java文件
package com.example.administrator.imageview_location_largeandnarrow; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import static com.example.administrator.imageview_location_largeandnarrow.R.color.colorAccent; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button add_imageview = findViewById(R.id.add_imageview); final RelativeLayout relativeLayout_add_imageview = findViewById(R.id.relativelayout_addimageview); add_imageview.setOnClickListener(new View.OnClickListener() { @SuppressLint("ResourceAsColor") @Override public void onClick(View v) { ImageView imageView = new ImageView(MainActivity.this); imageView.setImageResource(R.drawable.sunwukong); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(400, 400);//两个400分别为添加图片的大小 imageView.setLayoutParams(params); imageView.setBackgroundColor(colorAccent); relativeLayout_add_imageview.addView(imageView); } }); } }
在onclick()的逻辑大概如下所述,新建一个imageview控件,设置图片,创建一个线性布局参数容纳imageview,设置图片的背景颜色,最后把imageview添加进相对布局。这里设置imageview的背景颜色,是为了在仿真的时候,可以清楚imageview控件的实际大小。
1.3 仿真结果
2.在Java文件中设置图片的位置
2.1 Java文件(布局文件无需改变)
package com.example.administrator.imageview_location_largeandnarrow; import android.annotation.SuppressLint; import android.os.Bundle; import android. 4000 support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import static com.example.administrator.imageview_location_largeandnarrow.R.color.colorAccent; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button add_imageview = findViewById(R.id.add_imageview); final RelativeLayout relativeLayout_add_imageview = findViewById(R.id.relativelayout_addimageview); add_imageview.setOnClickListener(new View.OnClickListener() { @SuppressLint("ResourceAsColor") @Override public void onClick(View v) { ImageView imageView = new ImageView(MainActivity.this); imageView.setImageResource(R.drawable.sunwukong); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(400, 400); imageView.setLayoutParams(params); imageView.setBackgroundColor(colorAccent); ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(imageView.getLayoutParams()); margin.leftMargin=40; margin.topMargin=100; RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin); layoutParams.height = 400;//设置图片的高度 layoutParams.width = 400; //设置图片的宽度 imageView.setLayoutParams(layoutParams); imageView.setScaleType(ImageView.ScaleType.FIT_XY);//使图片充满控件大小 relativeLayout_add_imageview.addView(imageView); } }); } }红色部分的讲解。设置图片距离父控件左边距离为40,距离上面的距离为100,通过这两个参数就可以设置图片在父控件中的位置。笔者为了让读者更加清晰的看出代码的逻辑,就把函数拆分了,其实可以通过上面的layoutParams.setMargins()直接设置控件离父控件的距离。从左至右,分别是左上右下距离父控件的距离,跟初中的时候玩魔方的公式到是一样,很容易就记住了。至于为何右和下的距离设置为零,下面讲解控制控件单方向的放大的时候再详解。setScaleType,通过设置这个函数为fitxy,使图片充满控件。
2.2 仿真结果
还是可以很轻易看出结果的变化的。
3.在Java文件中控件图片的单方向的放大
这个才是本文的重点,也是目前网上,很难找到参考资料的。
3.1 Java文件
package com.example.administrator.imageview_location_largeandnarrow; import android.annotation.SuppressLint; import android.graphics.Point; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import static com.example.administrator.imageview_location_largeandnarrow.R.color.colorAccent; public class MainActivity extends AppCompatActivity { private int num=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button add_imageview = findViewById(R.id.add_imageview); final RelativeLayout relativeLayout_add_imageview = findViewById(R.id.relativelayout_addimageview); add_imageview.setOnClickListener(new View.OnClickListener() { @SuppressLint("ResourceAsColor") @Override public void onClick(View v) { int screenWidth = getScreenWidth(); ImageView imageView = new ImageView(MainActivity.this); imageView.setImageResource(R.drawable.sunwukong); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 400); imageView.setLayoutParams(params); imageView.setBackgroundColor(colorAccent); ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(imageView.getLayoutParams()); margin.leftMargin=40; margin.topMargin=10+num; margin.rightMargin=screenWidth-400-margin.leftMargin-num; RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin); imageView.setLayoutParams(layoutParams); imageView.setScaleType(ImageView.ScaleType.FIT_XY);//使图片充满控件大小 relativeLayout_add_imageview.addView(imageView); num+=100; } }); } public int getScreenWidth() { Point point = new Point(); getWindowManager().getDefaultDisplay().getSize(point); return point.x; } }
好啦,终于到了最激动人心的时刻! 上述代码中,设置的是将imageview横向放大,所以将固定长度400的宽度,设置成了wrap-content。要放大自然不能固定大小!上文中我们说到,控制控件在父布局中的位置的时候,不需要设置右和下的距离,1是因为既然设置左和上的距离就能控制位置,就无需多次一举,2是设置错了的话,会改变图片的大小。父控件总的宽度-控件到父控件左边的距离-右边的距离=控件的宽度!!
对的,就是这么简单,利用这个原理就可以轻松实现了图片的单方向放大。至此,相信你也应该明白,为啥要设置图片充满布局了吧!
3.2 仿真结果
好啦,至此为止,第一篇博客算是写完了。 如果你感觉确实有用,麻烦给点鼓励,点个赞!remember 萧洛!
相关文章推荐
- Android中imageView图片放大缩小及旋转功能示例代码
- Android WebView网页自适应手机,可放大缩小设置代码
- Android设置SurfaceView任意大小和任意位置
- Android 自定义View可拖动移动位置及边缘拉伸放大缩小 - Livingstone
- Android 自定义View可拖动移动位置及边缘拉伸放大缩小
- android 多个ImageView图片缩小、放大、移动,图片不能移出ImageView视图,清空图片内存
- Android设置SurfaceView任意大小和任意位置
- android 对多点触碰缩放imageview的大小,和手势滑动移动view位置的思考
- Android-图片预览(自定义ImageView 封装(jar): 图片放大缩小,自由移动,双击放大,多点触控)
- Android 自定义View可拖动移动位置及边缘拉伸放大缩小
- Android菜鸟练习第十一课 双击放大缩小也可以通过手势改变大小的ZoomImageView
- 代码中设置ImageView大小
- android中使用Baidu Map遇到的问题之:移动Mapview上的放大缩小控件
- android 自定义imageview实现 图片放大缩小
- Android中用代码设置ImageView的src和background
- 如何在代码中设置imageview的大小
- Android 重载ImageView 可以使用手势放大缩小拖动
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 设置WebView可触摸放大缩小