Android 在代码中设置imageview的大小和位置(满足单方向的放大缩小和任意位置的移动)

       许久以前,在我还是初中的时候,有过一个当网络小说家的梦想,谁知到如今,却成一个程序员。享受生活,享受现在,做一个写博客的程序员,也算是了却当初的半个梦想。

                                                                                                                                                                                             ---萧洛

 本博客分三部分讲解

    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.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);
            }
        });
    }
} 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 萧洛!

 

 

 

  • 26
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值