LinearLayout和RelativeLayout对比

        LinearLayout和RelativeLayout是Android中应用最为广泛的两种布局, 绝大部分UI均可以通过两种布局中的任何一种进行实现,其对比如下:
         LinearLayout:

        1. LinearLayout可以实现子View按照权重分配显示区域,RelativeLayout则不行。

        2. 实现复杂的UI布局,LinearLayout通常需要更多的布局层级

        3. 相同UI同等层级情况下LinearLayout通常layout和draw性能更好。这是因为而LinearLayout只需调用一次measure过程,而RelativeLayout会调用2次。但是有weight属性存在时,LinearLayout 也需要两次measure。

        RelativeLayout:

        1. RelativeLayout可以实现分层布局,LinearLayout则不行。使用RelativeLayout时需注意上层的view可能不遮挡遮挡下层View的展示,但遮挡其点击事件。

        2. RelativeLayout的在复杂嵌套布局中,可以降低布局嵌套层级 。

        3. RelativeLayout的子View如果高度和RelativeLayout不同,会导致RelativeLayout在onMeasure()方法中做横向测量时,纵向的测量结果尚未完成,只好暂时使用自己的高度传入子View系统。这可能会导致额外的计算开销。解决办法就是可以使用padding代替margin以优化此问题。

        

       

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。以下是可以用来制作一个imageviewer并在gridview中展示四张图片的详细代码(不包括透明度和对比度的部分)。 首先,在Java文件中,我们需要创建一个继承自BaseAdapter类的适配器,用来显示图片和处理点击事件。代码如下: ``` public class ImageAdapter extends BaseAdapter { private Context mContext; private LayoutInflater mInflater; private Integer[] mImageIds = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4 }; public ImageAdapter(Context context) { mContext = context; mInflater = LayoutInflater.from(context); } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return mImageIds[position]; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.grid_item, null); holder = new ViewHolder(); holder.image = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.image.setImageResource(mImageIds[position]); final int pos = position; holder.image.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(mContext, FullImageActivity.class); intent.putExtra("id", mImageIds[pos]); mContext.startActivity(intent); } }); return convertView; } static class ViewHolder { ImageView image; } } ``` 接下来,我们在res/layout文件夹中新建一个grid_item.xml文件,用来定义每个网格视图的布局。代码如下: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/image" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="centerCrop" /> </RelativeLayout> ``` 然后,我们需要创建一个FullImageActivity类,用来显示用户点击的图片。代码如下: ``` public class FullImageActivity extends Activity { private ImageView mImageView; private SeekBar mSeekBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.full_image); mImageView = (ImageView) findViewById(R.id.full_image); mSeekBar = (SeekBar) findViewById(R.id.seek_bar); Intent intent = getIntent(); int id = intent.getIntExtra("id", 0); mImageView.setImageResource(id); } } ``` 最后,在res/layout文件夹中新建一个full_image.xml文件,用来定义全屏视图的布局。代码如下: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/full_image" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitCenter" /> <LinearLayout android:id="@+id/slider_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="vertical" > <SeekBar android:id="@+id/seek_bar" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </RelativeLayout> ``` 需要注意的是,在这里,我们只提供了展示图片和切换图片的功能。如果你需要添加更多的特性,例如透明度和对比度调整,你需要在FullImageActivity类中添加相应的代码,或者使用现有的第三方库来实现这些功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值