当前位置: 代码迷 >> 综合 >> Android学习笔记(三)----ImageView,ListView,GridView,ScrollView HorizontalScrollView
  详细解决方案

Android学习笔记(三)----ImageView,ListView,GridView,ScrollView HorizontalScrollView

热度:87   发布时间:2023-11-22 10:18:55.0

继续…

(2-7)ImageView

在这里插入图片描述

1.常用属性

					scaleType
  • fitXY:填满控件,宽高比可能会发生改变
  • fitCenter:保持宽高比缩放,直至能够完全显示
  • centerCrop:保持宽高比缩放,直至能够完全填满控件,会发生裁剪

2.加载网络图片

需要利用Activity里的代码来实现,同时需要用到github库里的glide.jar包
在这里插入图片描述
具体下载方法,自行百度
然后代码如下:

mIv4 = findViewById(R.id.iv_4);
Glide.with(this).load("https://www.baidu.com/img/bd_logo1.png?where=super").into(mIv4);

load()里面写任意图片的url,由于用到了网络连接,所以需要在AndroidManifest.xml里添加访问网络的权限

<uses-permission android:name="android.permission.INTERNET"/>

效果如下:
在这里插入图片描述

(2-8)ListView

在这里插入图片描述

2.Adapter接口

首先来了解手动建立Activity和布局文件,在listview包里创建ListViewActivity.java文件,之后在AndroidManifest.xml中声明

<activity android:name=".listview.ListViewActivity"></activity>

然后再创建ListViewActivity的布局文件,activity_listview.xml,在该文件里面添加ListView控件
回到ListViewActivity文件

private ListView mLv1;protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_listview);mLv1 = findViewById(R.id.lv_1);mLv1.setAdapter();	//Adapter是连接后端数据和前端显示的适配器接口
}

再创建一个MyListAdapter文件,用来实现Adapter接口的方法,其中有

public int getCount();
public Object getItem(int position);
public long getItemId(int position);
//采用了优化模式,通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 UI 的响应速度。
public View getView(int position, View convertView, ViewGroup parent){ViewHolder holder = null;if (convertView == null) {convertView = mLayoutInflater.inflate(R.layout.layout_list_item, null);holder = new ViewHolder();holder.imageView = convertView.findViewById(R.id.iv);holder.tvTitle = convertView.findViewById(R.id.tv_title);holder.tvTime = convertView.findViewById(R.id.tv_time);holder.tvContent = convertView.findViewById(R.id.tv_content);convertView.setTag(holder);	//setTag把查找的view缓存起来方便多次重用}else {holder = (ViewHolder) convertView.getTag();}//给控件赋值,直接通过holder获取下面三个子控件,不必使用findviewbyid,加快了 UI 的响应速度holder.tvTitle.setText("这是标题");holder.tvTime.setText("2088-08-08");holder.tvContent.setText("这是内容");Glide.with(mContext).load("https://www.baidu.com/img/bd_logo1.png?where=super").into(holder.imageView);return convertView;
}
//创建一个静态ViewHolder类,ViewHolder模式通过getView()方法返回的视图的标签(Tag)中存储一个数据结构,这个数据结构包含了指向我们要绑定数据的视图的引用,从而避免每次调用getView()的时候调用findViewById())
static class ViewHolder{public ImageView imageView;public TextView tvTitle,tvTime,tvContent;
}

ListView控件也可以实现按压变色,通过添加selector实现

  • state_focused:是否处于聚焦(获取焦点)状态,一个窗口只能有一个视图获得焦点,一般由用户交互导致,无需应用程序直接改变
  • state_pressed:是否处于被按下状态,由用户导致(触摸操作)
  • state_selected:是否处于被选择状态,程序可调用setSelected()改变其状态

(2-9)GridView

在这里插入图片描述

extends AppCompatActivity		//会默认添加标题栏,是Activity的子类
extends Activity

1.常用属性

android:numColumns="3"	//用于设置一行显示多少item
android:horizontalSpacing="10dp"	//设置item之间的水平间距
android:verticalSpacing="10dp"		//设置item之间的垂直间距

2.Adapter接口

同上面ListView的一样,通过convertView+ViewHolder来实现

3.点击事件

	private GridView mGv;mGv = findViewById(R.id.gv);mGv.setAdapter(new MyGridViewAdapter(GrideViewActivity.this));//设置点击事件监听器mGv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(GrideViewActivity.this, "点击 pos"+position,Toast.LENGTH_SHORT).show();}});//设置长按事件监听器mGv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(GrideViewActivity.this, "长按 pos"+position, Toast.LENGTH_SHORT).show();return true;}});

注意长按事件监听器里的返回值为true,表示长按监听只执行长按监听中执行的代码,若为false,还会继续响应其他监听中的事件。
为false时,比如你长按pos=0的item,先提示"长按 pos0",当你松开后,继续提示"点击 pos0",
为true时,长按时会提示"长按 pos0",松开时并不会提示其他事件监听器的消息

(2-10) 滚动视图ScrollView & HorizontalScrollView

1.垂直滚动视图ScrollView

使用方法如下:其子控件只能是一个

<ScrollView<<><><>>
</ScrollView>

2.水平滚动视图HorizontalScrollView

同ScrollView一样

  相关解决方案