Android动态设置view的大小及其位置

动态设置view的大小及其位置

需求就不说了,下面贴代码:

MainActivity

主要就是对view的操作,例如:

public class MainActivity extends Activity implements OnClickListener {

    private Button btn;
    private ImageView iv;
    private LinearLayout ll_group;
    public boolean isFullScreen = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

    }

    private void initView() {
        btn = (Button) findViewById(R.id.btn);
        iv = (ImageView) findViewById(R.id.iv);
        ll_group = (LinearLayout) findViewById(R.id.ll_group);

        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        if (isFullScreen) { // 全屏转半屏
            setViewSize(iv);
            isFullScreen = false;
        } else {
            isFullScreen = true;
            setViewFullScreen(iv);

        }

    }

    /**
     * 设置view的大小
     * 
     * @param iv2
     */
    private void setViewFullScreen(ImageView view) {
        MarginLayoutParams margin = new MarginLayoutParams(view.getLayoutParams());
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin);
        layoutParams.width = 1000 ;
        layoutParams.height = 800 ;
        view.setLayoutParams(layoutParams);
    }

    /**
     * 自定义设置位置及其大小
     * 
     * @param iv2
     */
    private void setViewSize(ImageView view) {
        MarginLayoutParams margin = new MarginLayoutParams(view.getLayoutParams());
        int dpTop = dp2px( 10);
        int dpRight = dp2px( 10);
        int dpLeft=dp2px( 10);

        margin.setMargins(dpLeft, dpTop, dpRight, 0);

        DisplayMetrics metric = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);


        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin);
        layoutParams.width = 500;
        layoutParams.height= 400;
        view.setLayoutParams(layoutParams);
    }
    public  int dp2px(float dpValue){
        final float scale=MainActivity.this.getResources().getDisplayMetrics().density;

        return (int)(dpValue*scale+0.5f);
    }
}

xml

<LinearLayout 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"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/ll_group"
        android:layout_height="400dp"
        android:layout_width="match_parent"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/iv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/aa" />
    </LinearLayout>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="button" />

</LinearLayout>

注意事项

动态变化的view设置宽高属性时,指向的引用类型,应该是该view的父控件。否则将会报:

   java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams 
cannot be cast to android.widget.LinearLayout$LayoutParams
    MarginLayoutParams margin = new MarginLayoutParams(view.getLayoutParams());
        /**
        *在xml中,view的父控件是LinearLayout这里要LinearLayout.LayoutParams.
          */
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin);
        layoutParams.width = 1000 ;
        layoutParams.height = 800 ;
        view.setLayoutParams(layoutParams);

猜你喜欢

转载自blog.csdn.net/u012560369/article/details/53741434