图片常用的控件

 常用的图片控件
     


     ImageView
         android:contentDescription 对图片进行描述
 android:scaleType fitXY 匹配X轴和Y轴
 最常用的方法:
    imageview.setImageResource 设置图片资源
    使用的时候尽量不要使用大量的高清的图片,
    手机的性能没电脑强大,过多的使用,会出现,
    outofmemory的错误


    ImageButton
          相对于ImageView来说在周围会出现边框,让人看起来就是按钮的感觉
                 支持android;scaleType
如果想要使用自己定义的ImageButton可以设置一下,android:background="@/null"
             
     两者功能上作用一样,但是为了规范一下,分开来写
            imageButton其实就是一个ImageView
            如果不喜欢Imageutton的边框,可以按以上设置
   两者都可以设置监听器
   如果显示图片,使用Imageview,如果响应时间,使用ImageButton




   ImageSwitcher
        其实是一种选择器
用于切换显示图片的控件
反复的调用ImageView的SetImageXXX()方法就可以实现图片的切换
使用ImageView切换显示图片的本质是在
     同一个控件中设置不同的图片,而ImageSwitcher的本质是一种ViewGroup,包含2
     个子级ImageView,其切换本质是ImageView
  在使用ImageSwitcher时,需要为它添加2个子级的ImageView控件,且应该通过ViewSwitcher.ViewFactory

  接口的实现类对象完成子级ImageView的添加

ImageSwitcher实现的类似于安卓手机自带图库的小案例:


               适配器:

package com.edu.cn.image;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class ImageViewGridAdapter extends BaseAdapter {

	private Context context;
	private List<Integer>data;
	
	
	public ImageViewGridAdapter(Context context, List<Integer> data) {
		super();
		this.context = context;
		setData(data);
	}

	public void setData(List<Integer> data){
		if(data == null){
			data = new ArrayList<Integer>();
		}
		this.data = data;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return this.data.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder;
		if(convertView == null){
			holder = new ViewHolder();
			convertView = LayoutInflater.from(context).inflate(R.layout.grid_item, null);
			holder.image = (ImageView)convertView.findViewById(R.id.item_grid);
           convertView.setTag(holder);
		}else{
			holder =(ViewHolder) convertView.getTag();
		}
		
		holder.image.setImageResource(data.get(position));
		return convertView;
	}
	private class ViewHolder{
		ImageView image;
	}

}

主Activity,用来显示浏览的界面:

package com.edu.cn.image;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.MainThread;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

public class MainActivity extends Activity {
   
	private GridView gridview;
	private ImageViewGridAdapter adapter;
	private ArrayList<Integer>data;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.image);
		
		gridview = (GridView)findViewById(R.id.gridView1);
		data = new ArrayList<Integer>();
		adapter = new ImageViewGridAdapter(this, data);
		gridview.setAdapter(adapter);
		
		data.addAll(getData());
		adapter.notifyDataSetChanged();
		
		gridview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this,DisplayActivity.class);
			    intent.putIntegerArrayListExtra("data", data);
				intent.putExtra("position", position);
				startActivity(intent);
			}
		});
	}
	
	public List<Integer> getData(){
		List<Integer> data = new ArrayList<Integer>();
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.sd);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		data.add(R.drawable.rt);
		data.add(R.drawable.qw);
		return data;
	}
}

跳转以后的界面,能够单独显示一张图片,能够上下页切换:

package com.edu.cn.image;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ViewSwitcher;
import android.widget.ViewSwitcher.ViewFactory;

public class DisplayActivity extends Activity implements ViewFactory {
    private ArrayList<Integer> data;
    private int position;
    private ImageSwitcher imageswitcher;
    ViewSwitcher v;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
  		setContentView(R.layout.activity_display);
	    Intent intent = getIntent();
	    data = intent.getIntegerArrayListExtra("data");
	    position = intent.getIntExtra("position", 0);
	    
	   
	    imageswitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher2);
	   imageswitcher.setFactory(this);
	}
	
	public void doShowPrevious(View v){
		position--;
		if(position < 0){
			position = data.size() - 1;
		}
		imageswitcher.setImageResource(data.get(position));
	}
	public void doShowNext(View v){
		position++;
		if(position >= data.size()){
			position = 0; 
		}
		imageswitcher.setImageResource(data.get(position));
	}

	@Override
	public View makeView() {
		// TODO Auto-generated method stub
		ImageView view = new ImageView(this);
		view.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
		view.setScaleType(ScaleType.FIT_CENTER);
		view.setImageResource(data.get(position));
		return view;
	}
}

布局,浏览所有图片的布局:


<RelativeLayout 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" 
    >

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3"
        android:columnWidth="70dp"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:stretchMode="columnWidth"
         >
    </GridView>

</RelativeLayout>

每张图片布局item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/item_grid"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_gravity="center_vertical"
        android:src="@drawable/receive" />

</LinearLayout>

跳转以后显示一张图片的界面:

<RelativeLayout 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"
     >

    <ImageSwitcher
        android:id="@+id/imageSwitcher2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
         >
    </ImageSwitcher>

    <LinearLayout
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:onClick="doShowPrevious"
            android:layout_height="wrap_content"
            android:text="上一张" />

        <Button
            android:layout_weight="1"
            android:onClick="doShowNext"
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="下一张" />

    </LinearLayout>

</RelativeLayout>



posted @   wojiaohuangyu  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示