关于自定义view的适配问题

时间:2022-07-24 16:06:04
自定义view的时候往往,有一些适配不同的屏幕的手机,<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:layout_centerInParent="true">
    
        <RelativeLayout 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            >
  <ImageView android:id="@+id/img_background" android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" android:background="@drawable/backgroundcenter"/>
       <com.examclass.circle.RotatView
           android:id="@+id/myRotatView"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerInParent="true"
           ></com.examclass.circle.RotatView>
    </RelativeLayout>

  </RelativeLayout>

写在布局里,尽量要使用dp,相对布局,这时候我的view还没有适配成功,模拟器和真机还是有不同的,后来就在想为什么呢。。看了下代码:

 @Override
    protected void onDraw(Canvas canvas) {


        Matrix matrix = new Matrix();
        // 设置转轴位置
        matrix.setTranslate((float)width/2, (float)height/2);


        // 开始转
        matrix.preRotate(deta_degree);
        // 转轴还原
        matrix.preTranslate(-(float)width/2, -(float)height/2);


        // 将位置送到view的中心
        matrix.postTranslate((float)(maxwidth - width-40), (float)(maxwidth - height-35));//就是这里了,可以想自己来适配,因为view是以左上脚为圆心的,而parent又是中心,、、、、、所以

     xml 显示view的时候在整个view的右下角,故而自己试下直接用固定的数字来适配,结果达到想要的效果了,这个跟取屏幕像素做比例的原理是一样的


        canvas.drawBitmap(rotatBitmap, matrix,paint);
       
        super.onDraw(canvas);
    }