您的位置:首页 > 移动开发 > Android开发

【Android】【自定义View】实现搜索放大镜旋转view

2012-07-26 11:50 816 查看
直接上代码吧:

public class SycleSearchView extends View implements  Runnable{
private int width=200,height=200; //画布宽高
private int srcId;
private Bitmap src=null;
private Context context;
private int left=0,top=0;
private int step=4;	//5
private boolean positive;
private Thread thread;
private boolean canStart=true;
private int iw,ih;//图片的宽高

public SycleSearchView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context=context;
}

public SycleSearchView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
this.context=context;
}

private void init(){
left=0;
top=height/2;
}

/**
*
* 方法: initXY
* 描述: TODO
* 参数: @param x
* 参数: @param positive true 表示向右运动
* 返回: void
* 异常
*/
private void initXY(int x){
left=x;
top=height/2-(int) Math.sqrt(height*height/4-(width/2-x)*(width/2-x));
if(!positive)
{
top=height-top;
}
}

public void setSize(int width,int height){
this.width=width;
this.height=height;
}

public void setImgRes(int id){
this.srcId=id;
src=BitmapFactory.decodeResource(context.getResources(), srcId);
iw=src.getWidth();
ih=src.getHeight();
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if(src==null){
return;
}
canvas.drawBitmap(src, left, top, null);
}

public void startsycle(){
canStart=true;
Thread localThread = new Thread(this);
this.thread = localThread;
this.thread.start();
}

public void stopsycle(){
canStart=false;
if(this.thread!=null){
this.thread.interrupt();
}
}

@Override
public void run() {
// TODO Auto-generated method stub
while(canStart){
if(positive){
if(left+step<width){
initXY(left+step);
}else{
positive=!positive;
initXY(left-step);
}
}else{
if(left-step>0){
initXY(left-step);
}else{
positive=!positive;
initXY(left+step);
}
}

postInvalidate();

try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}


 

调用方法:

Boolean test_start = false;

private Button.OnClickListener clickImageButton_imageButton_search = new Button.OnClickListener()
{
public void onClick(View v)
{
System.out.println("------clickImageButton_imageButton_search--------");

test_start = !test_start;
if(test_start){
imageButton_magnifier.startsycle();
}
else{
imageButton_magnifier.stopsycle();
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: