Hi,
Can any suggest some sample codes, with which we can rotate layout having images on touch .. am trying from 2 weeks but am not able to succeed.
Please check my code , i cant visibly rotate the canvas
private void rotateDialer(float degrees) {
layout.setNextRotation(degrees, dialerWidth / 2, dialerHeight / 2,matrix);
layout.postInvalidate();
layout.invalidate();
}
and this my custom view class :
<pre lang="java">package de.vrallev.tutorial.dialer;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class RotateLinearLayout extends RelativeLayout{
private Matrix mForward = new Matrix();
private Matrix mReverse = new Matrix();
private float[] mTemp = new float[2];
AbsoluteLayout dialView;
ImageView ab,fc,pic,co,pr,ref,tw,you;
private Context mContext;
private ArrayList<ImageView> imageViews=new ArrayList<ImageView>();
private Integer[] drawables={R.drawable.aboutus_btn,R.drawable.coworkers_btn,R.drawable.profile_btn,R.drawable.picasa_btn,R.drawable.youtube_btn,R.drawable.twitter_btn,R.drawable.facebook_btn,R.drawable.referral_btn};
float degrees;
float px,screenW;
float py,screenH;
public RotateLinearLayout(Context context) {
super(context);
mContext=context;
init();
}
public RotateLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mContext=context;
init();
}
public void init(){
setWillNotDraw(false);
LayoutInflater inflator = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dialView = (AbsoluteLayout) inflator.inflate(R.layout.new_view, this,false);
addView(dialView);
}
public void setNextRotation(float degrees, float px, float py,Matrix matrix)
{
this.degrees = degrees;
this.px = px;
this.py = py;
screenW=px;
screenH=py;
System.out.println("....next");
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
{
canvas.translate(px,py);
float rotation = degrees;
float midX = px / 2.0f;
float midY = py / 2.0f;
canvas.rotate(rotation, midX, midY);
canvas.rotate(- rotation, midX, midY);
}
canvas.restore();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
event.setLocation(getWidth() - event.getX(), getHeight() - event.getY());
return super.dispatchTouchEvent(event);
}
@Override
public void onSizeChanged (int w, int h, int oldw, int oldh){
super.onSizeChanged(w, h, oldw, oldh);
screenW = w;
screenH = h;
}
}
am getting angle degree values in OnDraw method also, but view is not rotating.
Thanks
Uday