下面是代码
public class MainActivity extends Activity {
private int pagerWidth;
private List imageViewList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
imageViewList = new ArrayList<>();
ImageView first = new ImageView(MainActivity.this);
ImageView second = new ImageView(MainActivity.this);
ImageView third = new ImageView(MainActivity.this);
Bitmap bitmap1 = BitmapFactory.decodeResource(this.getResources(), R.drawable.first);
Bitmap bitmap2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.second);
Bitmap bitmap3 = BitmapFactory.decodeResource(this.getResources(), R.drawable.third);
first.setImageBitmap(bitmap1);
second.setImageBitmap(bitmap2);
third.setImageBitmap(bitmap3);
imageViewList.add(first);
imageViewList.add(second);
imageViewList.add(third);
viewPager.setOffscreenPageLimit(3);
pagerWidth = (int) (getResources().getDisplayMetrics().widthPixels * 3.0f / 5.0f);//3/5
ViewGroup.LayoutParams lp = viewPager.getLayoutParams();
if (lp == null) {
lp = new ViewGroup.LayoutParams(pagerWidth, ViewGroup.LayoutParams.WRAP_CONTENT);
} else {
lp.width = pagerWidth;
}
viewPager.setLayoutParams(lp);
viewPager.setPageMargin(-100);
findViewById(R.id.activity_main).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return viewPager.dispatchTouchEvent(motionEvent);
}
});
viewPager.setPageTransformer(true, new MyTransformation());
viewPager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return imageViewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageViewList.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = imageViewList.get(position);
container.addView(imageView, position);
return imageView;
}
});
}
}
public class MyTransformation implements ViewPager.PageTransformer {
private static final float MIN_SCALE=0.85f;
private static final float MIN_ALPHA=0.5f;
private static final float MAX_ROTATE=30;
private Camera camera=new Camera();
@Override
public void transformPage(View page, float position) {
float centerX=page.getWidth()/2;
float centerY=page.getHeight()/2;
float scaleFactor=Math.max(MIN_SCALE,1-Math.abs(position));
float rotate=20*Math.abs(position);
if (position<-1){
}else if (position<0){
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setRotationY(rotate);
}else if (position>=0&&position<1){
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setRotationY(-rotate);
}
else if (position>=1) {
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setRotationY(-rotate);
}
}
}
轮换的时候两侧的图片有锯齿想请问一下如何解决?想了一个自定义Imageview设置抗锯齿的方法来解决 但是在onDraw()里面报错空指针:at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1083)
下面是代码
public class AntiAliasImage extends ImageView {
private Paint paint = new Paint();
Bitmap src_bitmap = null;
public AntiAliasImage(Context context) {
this(context, null);//调用更多参数的构造方法
}
public AntiAliasImage(Context context, AttributeSet attrs) {
this(context, attrs, 0);//调用更多参数的构造方法
}
public AntiAliasImage(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
BitmapDrawable bd = (BitmapDrawable) this.getDrawable();
if (bd != null) {
src_bitmap = bd.getBitmap();
}
paint = new Paint();
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setAntiAlias(true);
try {
canvas.drawBitmap(src_bitmap, 0, 0, paint);
}catch (NullPointerException e){
e.printStackTrace();
}
}
}
想请教一这里的错误如何解决,还有这个方法可以解决图片锯齿的问题吗。。