listview-怎么在ListView的Item里面去用SurfaceView绘制

问题描述

怎么在ListView的Item里面去用SurfaceView绘制

package com.example.mysurfaceviewdemo;

import java.util.Random;

import android.graphics.Bitmap;

public class BitmapBubble {

private Bitmap mBitmap;

private int maxX;

private int maxY;

private int x;

private int y;

private boolean isRight = true;

private boolean isUp = true;

Random random = new Random();

private int speedX = random.nextInt(2)+1;

private int speedY = random.nextInt(10)+1;

public BitmapBubble(Bitmap mBitmap,int x,int y,int maxX,int maxY){
    this.mBitmap = mBitmap;
    this.x = x;
    this.y = y;
    this.maxX = maxX - mBitmap.getWidth();
    this.maxY = maxY - mBitmap.getHeight();
}

public int getMaxX() {
    return maxX;
}

public void setMaxX(int maxX) {
    this.maxX = maxX;
}

public int getMaxY() {
    return maxY;
}

public void setMaxY(int maxY) {
    this.maxY = maxY;
}

public int getX() {
    x+=speedX;
    return x;
}

public int getY() {
    y-=speedY;
    return y;
}

public void setX(int x) {
    this.x = x;
}

public void setY(int y) {
    this.y = y;
}

public int getSpeedX() {
    return speedX;
}

public void setSpeedX(int speedX) {
    this.speedX = speedX;
}

public Bitmap getmBitmap() {
    return mBitmap;
}

public void setmBitmap(Bitmap mBitmap) {
    this.mBitmap = mBitmap;
}

}

package com.example.mysurfaceviewdemo;

import java.util.ArrayList;
import java.util.Random;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff.Mode;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MySurfaceView extends SurfaceView implements Callback,Runnable{

private SurfaceHolder mSurfaceHolder;

private Thread mThread;

private Canvas canvas;

private int ScreenW, ScreenH; 

private Random random = new Random();

private ArrayList <BitmapBubble> list  = new ArrayList<BitmapBubble>();

int maxY;

int maxX;

int x ;

int y ;

private boolean hasBitmapBubble = true;

private Bitmap mBitmap;

private BitmapBubble mBitmapBubble;

private int BitmapIds [] = new int []{R.drawable.water,R.drawable.water2,R.drawable.water3,R.drawable.water4};

public MySurfaceView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    initSurfaceView(context);
}

public MySurfaceView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initSurfaceView(context);
}
public MySurfaceView(Context context) {
    super(context);
    initSurfaceView(context);
}

@Override
public void run(){
    Canvas canvas = mSurfaceHolder.lockCanvas();
     maxX = canvas.getWidth();
     maxY = canvas.getHeight();
     x = 30;
     y = maxY-80;
     mSurfaceHolder.unlockCanvasAndPost(canvas);

     while(true){
        canvas = mSurfaceHolder.lockCanvas();
        if(canvas==null){
            return;
        }
        canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
        for(int j=0; j<list.size();j++){
            mBitmapBubble = list.get(j);
            canvas.drawBitmap(mBitmapBubble.getmBitmap(),mBitmapBubble.getX(), mBitmapBubble.getY(), null);
            if(mBitmapBubble.getX()>mBitmapBubble.getMaxX()){
                list.remove(mBitmapBubble);
            }
            if(mBitmapBubble.getY()<0){
                list.remove(mBitmapBubble);
            }
        }
            mSurfaceHolder.unlockCanvasAndPost(canvas);
            try {
                Thread.sleep(150);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}

public void initSurfaceView(Context context){
    mSurfaceHolder = this.getHolder();
    mSurfaceHolder.addCallback(this);
    this.setZOrderOnTop(true);//设置画布  背景透明
    this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
    drawBubble();
    mThread = new Thread(this);
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    mThread.start();
    //生产冒泡
    new Thread(){
        public void run() {
            while(true){
                int position = random.nextInt(4);
                int resId = BitmapIds[position];
                mBitmap = BitmapFactory.decodeResource(getResources(),resId);
                Bitmap bitmap = Bitmap.createScaledBitmap(mBitmap, 50, 50, false);
                list.add(new BitmapBubble(bitmap, x, y, maxX, maxY));
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        }.start();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {

}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    mThread.stop();
}
public ArrayList<BitmapBubble> getList() {
    return list;
}
public void setList(ArrayList<BitmapBubble> list) {
    this.list = list;
}
public void drawBubble(){
        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
        Bitmap bitmap = Bitmap.createScaledBitmap(mBitmap, 40, 40, false);
        list.add(new BitmapBubble(bitmap, x, y, maxX, maxY));
}

}

package com.example.mysurfaceviewdemo;

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

public class MyAdapter extends BaseAdapter{
Context mContext;
public MyAdapter(Context mContext){
this.mContext = mContext;
}

@Override
public int getCount() {
    return 10;
}

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = LayoutInflater.from(mContext).inflate(R.layout.activity_main, null);

  final MySurfaceView mySurfaceView = (MySurfaceView)view.findViewById(R.id.mysurfaceview);
  Button btn = (Button) view.findViewById(R.id.btn);
  btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            mySurfaceView.drawBubble();
        }
    });
    return view;
}

}

package com.example.mysurfaceviewdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {
MySurfaceView mySurfaceView;
Button btn;
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
// setContentView(R.layout.activity_main);
// mySurfaceView = (MySurfaceView) findViewById(R.id.mysurfaceview);

// btn = (Button) findViewById(R.id.btn);

// btn.setOnClickListener(new OnClickListener() {

// @Override
// public void onClick(View v) {
// mySurfaceView.drawBubble();
// }
// });

listview = (ListView)findViewById(R.id.listview);
listview.setAdapter(new MyAdapter(getApplicationContext()));
}

}

求大牛教育
,为什么我在绘制的时候,它的回调不走,但是SurfaceView的宿主是Activity的时候就可以去绘

解决方案

在ListView中多个item里面的按钮,获取不到当前item的位置

解决方案二:

http://www.linuxidc.com/Linux/2012-02/54369p4.htm

时间: 2024-10-20 13:02:06

listview-怎么在ListView的Item里面去用SurfaceView绘制的相关文章

如何更改其它程序ListView控件中某个Item的内容

一:程序说明 这次我将介绍如何更改其他程序ListView控件中某个Item的内容,关于类似的拙文我已经写了两篇,这是第三篇,本篇和第一篇<如何向其他程序的 ListView 控件发送 LVM_GETITEMTEXT 消息>类似,区别在于: 发送的消息不同:前者是读取pszText的内容--发送LVM_GETITEMTEXT:这次是设置pszText,应该发送LVM_SETITEMTEXT: 字符串缓冲区的作用不同:前者pItem用来接收ITEMTEXT,我们可以通过ReadProcessMe

本人是新手,请问各位大神,如何删除listview中的一项item,最好有代码

问题描述 本人是新手,请问各位大神,如何删除listview中的一项item,最好有代码 10C 本人是新手,请问各位大神,如何删除listview中的一项item,最好有代码 解决方案 android listview的创建及行删除操作2011-03-16 12:02 3102人阅读 评论(0) 收藏 举报Step1:创建listview ListView list = (ListView) findViewById(R.id.ListView01); list.setBackgroundCo

Android中listview显示界面其中一条item比另外的高

问题描述 Android中listview显示界面其中一条item比另外的高 在app开发过程中要求 listview显示页面中其中的一条item 比其他的item要高一倍 各位大牛们,提提建议 解决方案 两个不同item布局,通过重载adapter的getItemViewType,来实现布局切换 解决方案二: 写一个判断,如果某个item包含你要的值,就设置它的高度.

Android如何在ListView中嵌套ListView

前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListView会显示不完全,它的高度始终有问题.上网查了下,发现别人也有遇到这样的问题,而大多数人都不推荐这样的设计,因为默认情况下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是无法计算的. 又搜索了一下,发现有StackOverflow上的牛人已经解决了这个问题,经过

Android实战技巧:如何在ListView中嵌套ListView

 前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListView会显示不完全,它的高度始终有问题.上网查了下,发现别人也有遇到这样的问题,而大多数人都不推荐这样的设计,因为默认情况下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是无法计算的. 又搜索了一下,发现有StackOverflow上的牛人已经解决了这个问题,经

android开发-listview内嵌套listview高度问题

问题描述 listview内嵌套listview高度问题 listview中嵌套了一个listview,里面的listview内的textview无法显示多行文字 解决方案 http://www.cnblogs.com/zhwl/p/3333585.html 类似上面解决 解决方案二: 不是这种的,我之前试过

edittext + listview 实现搜索listview中的内容方法(推荐)

主要原理:是在主界面有两个空间,一个是EditText,一个是ListView,ListView是放在EditText下面的,然后自定义建立一个adapter适配器, 这个适配器要继承Filterable这个接口,并实现这个接口的两个方法,一个是过滤方法,一个是过滤后的方法,一般我们是在过滤方法里面实现过滤, 在过滤后的方法里面调用notifyDataSetChanged();也就是使适配器更新数据,这里还有用到一个pinyin4j-2.5.0.jar的架包,这个主要是汉字转拼 音的功能 Mai

Android开发中ListView显示不同样式的item实例方法

还是先看效果图吧 我们再使用listview时,大多时候listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的item需要图片,有的不需要,但是这些又必须在同一个listview中显示,这时我们就需要在listview中显示多种样式的item,首先我们需要考虑的是如何将不同数量的数据装载到ArrayList<~>中呢,先看看下面的listViewItem,. package com.example

listview界面问题-ListView滑动到顶或到底问题

问题描述 ListView滑动到顶或到底问题 当界面下滑到底或上滑到顶的时候会出现一个与我们经常见的刷新是的灰色界面,怎么更改这种样式呢 解决方案 https://github.com/chrisbanes/Android-PullToRefresh实现的就是刷新功能 解决方案二: Android ListView NetworkImageView 滑动时复用问题