我使用过ScaleGestureDetector。 我使用了这段代码,但它在片段中不起作用,也没有显示任何错误 请有人帮我这个 提前 但是当我在活动中使用相同的代码时,它完美地运作
public class Fragment2 extends Fragment {
ImageView imgZoom;
Matrix matrix = new Matrix();
float scale = 1f;
ScaleGestureDetector SGD;
// Keep all Images in array
Integer[] mThumbIds = {
R.drawable. car1, R.drawable.car2,
R.drawable.car3, R.drawable.car4,
R.drawable.car5,R.drawable.car6,
R.drawable.car7,R.drawable.car8,
R.drawable.car9,R.drawable.car10,
R.drawable.car11,R.drawable.car12
};
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
/**
* Inflate the layout for this fragment
*/
View view = inflater.inflate(R.layout.fragment2,container,false);
//Sets the title of the Bar
final ActionBar bar = getActivity().getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setTitle("Pinch to zoom");
//Recives the value of position sent from Fragment1
int pos=getArguments().getInt("position");
Button btnBack=(Button)view.findViewById(R.id.btnBack);
imgZoom=(ImageView)view.findViewById(R.id.imageViewZoom);
imgZoom.setImageResource(mThumbIds[pos]);
SGD = new ScaleGestureDetector(view.getContext(),new ScaleListener());
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent mainScreen = new Intent(getActivity(), MainActivity.class);
startActivity(mainScreen);
}
});
return view;
}
public boolean onTouchEvent(MotionEvent ev) {
SGD.onTouchEvent(ev);
return true;
}
private class ScaleListener extends ScaleGestureDetector.
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
scale *= detector.getScaleFactor();
scale = Math.max(0.1f, Math.min(scale, 5.0f));
matrix.setScale(scale, scale);
imgZoom.setImageMatrix(matrix);
return true;
}
}
}
答案 0 :(得分:0)
试试这个。它适合我。
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
SGD.onTouchEvent(motionEvent);
return true;
}
});