仿QQ发送图片时选中后加蒙版(想看跑车请进)

主要实现给GridView加CheckBox选中后可以加蒙版

FruitAdapter

添加CheckBox和蒙版只需在FruitAdapter中完成造作即可

public class FruitAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private List<Fruit> mFruits;
    private boolean mCheckBoxManager[];

    public FruitAdapter(LayoutInflater mInflater, List<Fruit> mFruits) {
        this.mInflater = mInflater;
        this.mFruits = mFruits;
        mCheckBoxManager = new boolean[mFruits.size()];
    }

    @Override
    public int getCount() {
        return mFruits.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder vh = null;

        if (convertView == null) {

            convertView = mInflater.inflate(R.layout.gridview_item, null);
            vh = new ViewHolder();
            vh.imageView = (ImageView) convertView.findViewById(R.id.image);
            vh.textView = (TextView) convertView.findViewById(R.id.textview);
            vh.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
            vh.imageViewTint = (ImageView) convertView.findViewById(R.id.imageview_tint);
            convertView.setTag(vh);

        } else {
            vh = (ViewHolder) convertView.getTag();
        }
        Fruit fruit = mFruits.get(position);
        vh.imageView.setImageResource(fruit.getImg());
        vh.textView.setText(fruit.getName());
        vh.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mCheckBoxManager[position] = isChecked;
                Log.d("蒙版", "" + mCheckBoxManager[position] + position);
                notifyDataSetChanged();

            }
        });
        vh.checkBox.setChecked(mCheckBoxManager[position]);
        if (mCheckBoxManager[position]) {
            vh.imageViewTint.setVisibility(View.VISIBLE);

        } else {
            vh.imageViewTint.setVisibility(View.INVISIBLE);

        }
        return convertView;
    }

    static class ViewHolder {
        TextView textView;
        ImageView imageView;
        CheckBox checkBox;
        ImageView imageViewTint;
    }
}

此外以下XML文件实现蒙版

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

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
       />

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/image"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:gravity="center"
        />

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"

        android:focusable="false" />
<!--此ImageView时实现蒙版的关键需要设置visibility开始为invisible;使用Tint设置背景色蒙版不知道为什么就是不能实现,后改为background,也有同学说应该使用alignTop和alignLeft,我试验过都可以,并不是此原因,目前排除法唯一的区别在于使用background个tint上面。。。。。-->
    <ImageView
        android:id="@+id/imageview_tint"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/green_tind"
        android:visibility="invisible"
        android:layout_alignRight="@+id/checkbox"
        android:layout_alignBottom="@+id/textview"

        />
</RelativeLayout>

以下为其他文件

public class GridViewActivity extends ActionBarActivity {

    private LayoutInflater mInflater;
    private List<Fruit>mFruits;
    private GridView mGridView;
    private FruitAdapter fruitAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grid_view);
        mGridView= (GridView) findViewById(R.id.gridview);
        //忘记获得inflater会报空指针
        mInflater=getLayoutInflater();
        mFruits=new ArrayList<>();

        for(int i=0;i<10;i++){
            Fruit apple=new Fruit("苹果",R.mipmap.car1);
            Fruit banana=new Fruit("香蕉",R.mipmap.car2);
            Fruit grape=new Fruit("葡萄",R.mipmap.car3);
            Fruit car=new Fruit("葡萄",R.mipmap.car4);
            Fruit car1=new Fruit("葡萄",R.mipmap.car5);
            Fruit car2=new Fruit("葡萄",R.mipmap.car6);
            Fruit car3=new Fruit("葡萄",R.mipmap.car7);
            Fruit car4=new Fruit("葡萄",R.mipmap.car8);
            Fruit car5=new Fruit("葡萄",R.mipmap.car9);

            mFruits.add(apple);
            mFruits.add(banana);
            mFruits.add(grape);
            mFruits.add(car);
            mFruits.add(car1);
            mFruits.add(car2);
            mFruits.add(car3);
            mFruits.add(car4);
            mFruits.add(car5);

        }

        fruitAdapter=new FruitAdapter(mInflater,mFruits);

        mGridView.setAdapter(fruitAdapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_grid_view, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
********************************************
public class Fruit {
    private String name;
    private int img;

    public Fruit(String name, int img) {
        this.name = name;
        this.img = img;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImg() {
        return img;
    }

    public void setImg(int img) {
        this.img = img;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 08:32:15

仿QQ发送图片时选中后加蒙版(想看跑车请进)的相关文章

解决4.4版本以上剪裁图片时提示无法加载图片的问题

/** * 将uri转换成字符串 * 解决4.4版本以上获取到的uri是图片名称而非图片路径,导致剪裁图片时提示无法加载图片的问题 * 详细的解决方案,请参考这篇文章 * 当安卓的版本比较高时(如4.4),选择本地相册可能会返回“无法加载此图片” * 原因:正常uri是file://...而高版本是content://... * 所以需要一个转换操作 * * @param context * @param uri * @return */ @SuppressLint("NewApi")

仿QQ空间图片放缩查看

仿QQ空间图片放缩查看 仿QQ空间图片放缩查看,点击图片从原位置放大到全屏,后退从全屏缩小到原位置,效果非常好. 下载地址:http://www.devstore.cn/code/info/830.html  运行截图:   

安卓自定义View实现图片上传进度显示(仿QQ)

首先看下我们想要实现的效果如下图(qq聊天中发送图片时的效果): 再看下图我们实现的效果: 实现原理很简单,首先我们上传图片时需要一个进度值progress,这个不管是自己写的上传的方法还是使用第三方开源库,其次,需要自定义一个View并重写onDraw方法,此例中的进度是开启了一个线程,然后模仿进度递增,然后将进度值通过自定义View调用一个自定义方法传进自定义View并根据进度进行重绘. 绘制分为三部分: 1.绘制矩形(图片面积)上半部分阴影区: 2.绘制矩形(图片面积)下半部分非阴影区:

WPF下的仿QQ图片查看器

本例中的大图模式使用图片控件展示,监听控件的鼠标滚轮事件和移动事件,缩略图和鹰眼模式采用装饰器对象IndicatorObject和Canvas布局.百分比使用一个定时器,根据图片的放大倍数计算具体的数值显示. 首先看看效果图: 以下开始绘制图片 定义缩略图上白色的矩形,这其实是一个Indicator,它的外围是一个Canvas,然后缩略图是一个Image控件 internal class IndicatorObject : ContentControl { private MaskCanvas

仿QQ图片选择器--Android

当做一款APP,需要选择本地图片时,首先考虑的无疑是系统相册,但是Android手机五花八门,再者手机像素的提升,大图无法返回等异常因数,导致适配机型比较困难,微信.QQ都相继的在自己的APP里集成了图片选择功能,放弃了系统提供的图片选择器,这里仿造QQ做了一个本地图片选择器,PS:之前有人说"仿"写成“防”了,今儿特意注意了下,求不错. 先上一张效果图,无图无真相啊~~~ 实现的效果大概是这样的: 1.单选:跳转到本地图片选择文件夹,选择文件夹后,进入到该文件夹下的所有图片,选择某张

mina的编码和解码以及断包的处理,发送自定义协议,仿qq聊天,发送xml或json和

最近一段时间以来,mina很火,和移动开发一样,异常的火爆.前面写了几篇移动开发的文章,都还不错,你们的鼓励就是我最大的动力.好了,废话少说.我们来看下tcp通讯吧. tcp通讯对于java来说是很简单的.就是socket,也就是大家常说的套接字.大家不要把它看的很难.说白了tcp通讯其实就是数据流的读写.一条输入流,一条输出流.分别复杂发消息和接收消息. 明白了这些,ok,我们来看看我写的例子吧.先看服务器端的测试类的源码: package com.minaqq.test; import co

Android App 启动时显示正在加载图片(源码)

微信.QQ.天天动听等程序,在打开时显示了一张图片,然后跳转到相关界面.本文实现这个功能,其实很简单.... 新建两个Activity,LoadingActivity,MainActivity,将LoadingActivity设置为android.intent.action.MAIN.使用TimerTesk,或者Thread将LoadingActivity显示几秒后跳转到MainActivity界面. LoadingActivity: new Timer().schedule(new Timer

有效解决Android加载大图片时内存溢出的问题

首先解析一下基本的知识: 位图模式,bitmap颜色位数是1位 灰度模式,bitmap颜色位数是8位,和256色一样 RGB模式,bitmap颜色位数是24位 在RGB模式下,一个像素对应的是红.绿.蓝三个字节 CMYK模式,bitmap颜色位数是32位  在CMYK模式下,一个像素对应的是青.品.黄.黑四个字节 图像文件的字节数(Byte) = 图像分辨率*颜色深度/8(bit/8) 例如:一幅640*480图像分辨率.RGB色一般为24位真彩色,图像未经压缩的数据容量为:640X480X24

在类似qq或者微信聊天中。如何根据不同的手机发送图片

原文:在类似qq或者微信聊天中.如何根据不同的手机发送图片   前一段时间,公司自己要求做多客服开发,但是对于发送图片这一块,当时很苦恼,我用自己的手机(米2)测试,不管是本地,还是云相册,最新照片.都没有问题,但是测试那边一直说图片发不了,而且还会崩.很纳闷.      后来经过debug,发现4.4以上的手机,它的图片路径居然不一样,有file://开头的,也有content://开头的,还有/mnt/sdcard/开头的,坑爹啊,我自己的手机是4.1的,不一样.     4.4以前的路径都