「已注销」 2017-03-01 07:20 采纳率: 0%
浏览 1252

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

下面是代码
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();
}

}

}

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

  • 写回答

1条回答

  • zqbnqsdsmd 2017-03-01 22:39
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序