• 【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();
    		}			
    	}
    };
  • 相关阅读:
    Oracle创建表空间、创建用户以及授权
    链接正常但IE浏览器无法显示网页的几种情况
    Oracle11g自带的SQL_developer无法打开
    Oracle- 复杂查询及总结
    oracle用户管理
    Oracle简介及安装
    【js】setInterval动态改变定时器时间周期,三次点击事件,时间间隔内只捕捉一次点击事件
    【tip】java_mysql遇到的一些问题
    【tip】java_部署名称与项目名称不一致
    【tip】java_1
  • 原文地址:https://www.cnblogs.com/Amandaliu/p/2609761.html
Copyright © 2020-2023  润新知