「已注销」 2017-02-27 06:31 采纳率: 0%
浏览 1034

viewpaper 实现图片切换的3D效果 出现锯齿

下面是代码
public class MainActivity extends Activity {

private int pagerWidth;
private List<ImageView> 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();
    }

}

}


想请教一这里的错误如何解决,还有这个方法可以解决图片锯齿的问题吗。。

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2017-02-27 23:52
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算