중력 감지, 그림 흔 들 림 회전 (사용자 정의 컨트롤) android

이미지 뷰 컨트롤 을 사용자 정의 합 니 다. 중력 감지 에 따라 그림 이 좌우 로 흔 들 립 니 다.http://download.csdn.net/detail/daweibalang717/6800609, 다운로드 후 스스로 보완 하 세 요)
         다음은 주 코드:
public void setText(String text,float size){
		this.text = text;
		myPaint.setColor(Color.WHITE);
		myPaint.setTextSize(size);
		myPaint.setAntiAlias(true);//       
		myPaint.setFilterBitmap(true);//         。
		FontMetrics fm = myPaint.getFontMetrics(); //     		
		TextHeight = (float) Math.ceil(fm.descent - fm.top); //    
		float [] widths = new float[text.length()];
		myPaint.getTextWidths(text, widths);	
		for (int i =0;i<widths.length;i++ ){
			TextWidth += widths[i];
		}

	}
	public void setImage(int id){
		bitmap =  BitmapFactory.decodeResource(context.getResources(), id);
		BufferBitmap = Bitmap.createBitmap(bitmap.getWidth()+width_padding, bitmap.getHeight()+height_padding, bitmap.getConfig());//     ,      
		mCanvas = new Canvas(BufferBitmap);
		isHavaeImage = true;
	
		
	}
	
	@Override
	protected void onDraw(Canvas canvas)
	{
		// TODO Auto-generated method stub
		
	 
		super.onDraw(canvas);
	}

	@Override
	public void doRotate(float x)
	{
		// TODO Auto-generated method stub
		synchronized (this)
		{
			float degrees = (x / 10 )*90;    //     。 x          10    90 
			System.out.println("  :"+ degrees);
				matrix.postRotate(degrees-myDegress,BufferBitmap.getWidth()/2,0);
				myDegress = degrees;
		 
			
			if(isHavaeImage && degrees>=-20.0 && degrees <=20.0){ //        20 -20;
				
				clear(mCanvas);
				
				mCanvas.setMatrix(matrix);
			
				mCanvas.drawBitmap(bitmap,width_padding/2,0, myPaint);
	 
				mCanvas.drawText(text,(bitmap.getWidth()+width_padding-TextWidth)/2,bitmap.getHeight()/2+TextHeight, myPaint);//           
			
				setImageBitmap(BufferBitmap);//        Imageview;
				 
				invalidate();
			}
		}
	
		
	}
	public void clear(Canvas cancas){
		
		Paint paint = new Paint();  
		
		paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
		cancas.drawPaint(paint);
	}

좋은 웹페이지 즐겨찾기