【Android】【自定义View】实现搜索放大镜旋转view
直接上代码吧:
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();
}
}
};
作者:风倾清凌
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

浙公网安备 33010602011771号