android点击加载更多信息,Android-点击图片不同区域显示不同信息

我先说说我自己的思路,也希望大家能告诉我更好得实现方式

思路:把一张图切成好几张图片,然后叠加绘制在一起,然后判断点击后产生得坐标,是否在所点击图片区域之类,然后判断是否点击得是透明区域,如果是透明就,传递到下层图片,如果不是直接显示内容.

代码如下:

import java.util.HashMap;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.drawable.BitmapDrawable;

import android.view.MotionEvent;

import android.view.View;

/**

* @author HuangYunLin

*

*/

public class RectsView extends View {

private Bitmap[] mBitmaps;

private Bitmap bitmap1, bitmap2, bitmap3, bitmap4;

private Rect mRect[];

private HashMap cacheBitMap;

private Rect mRect1;

private Rect rect;

private float x, y;

private Paint mPaint;

private boolean isOnTouch;

public RectsView(Context context) {

super(context);

cacheBitMap = new HashMap();

//抠图,每张图片得宽高都一样

bitmap1 = ((BitmapDrawable) getResources().getDrawable(R.drawable.head)).getBitmap();

bitmap2 = ((BitmapDrawable) getResources().getDrawable(R.drawable.close)).getBitmap();

bitmap3 = ((BitmapDrawable) getResources().getDrawable(R.drawable.boots)).getBitmap();

bitmap4 = ((BitmapDrawable) getResources().getDrawable(R.drawable.bag)).getBitmap();

mBitmaps = new Bitmap[4];

mBitmaps[0] = bitmap1;

mBitmaps[1] = bitmap2;

mBitmaps[2] = bitmap3;

mBitmaps[3] = bitmap4;

mRect = new Rect[4];

mPaint = new Paint();

mPaint.setColor(Color.RED);

// 创建和位图一样位置的Rect

for (int i = 0; i < mRect.length; i++) {

mRect[i] = new Rect(0, 0, bitmap1.getWidth(), bitmap1.getHeight());

cacheBitMap.put(mRect[i], mBitmaps[i]);

}

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

for (int i = 0; i < mBitmaps.length; i++) {

canvas.drawBitmap(mBitmaps[i], 0, 0, mPaint);

}

if (isOnTouch) {

isOnTouch = false;

System.out.println("点击X:" + x + "点击Y:" + y);

for (int i = 0; i < mRect.length; i++) {

//判断点击得坐标点是否在图片范围内

if (mRect[i].contains((int) x, (int) y)) {

//判断坐标点不超过图片得宽高

if ((int) x > bitmap1.getWidth() || (int) y > bitmap1.getHeight()) {

return;

}

Bitmap mBitmap = cacheBitMap.get(mRect[i]);

System.out.println("范围之内:" + i);

//判断坐标点是否是在图片得透明区域

if (mBitmap.getPixel((int) x, (int) y) == 0) {

System.out.println("bitmap透明区域:" + i);

// second(canvas);

} else {

System.out.println("不透明区域:" + i);

mPaint.setColor(Color.RED);

mPaint.setTextSize(15);

canvas.drawLine(x, y, x + 30, y, mPaint);

canvas.drawText("点击得是-->" + i, x + 30, y+5, mPaint);

break;

}

}

}

}

}

@Override

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

isOnTouch = true;

x = event.getX();

y = event.getY();

// 重绘

invalidate();

}

return true;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值