मुझे एक ImageView और एक बिटमैप की आवश्यकता है, इसलिए Bitmap को ImageView आकार में स्केल किया जाता है, और ImageView का आकार स्केल्ड बिटमैप के समान है :)।
मैं इस पोस्ट के माध्यम से देख रहा था कि यह कैसे करना है, और आखिरकार मुझे क्या चाहिए, हालांकि यहां वर्णित तरीका नहीं है।
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/acpt_frag_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/imageBackground"
android:orientation="vertical">
<ImageView
android:id="@+id/acpt_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:layout_margin="@dimen/document_editor_image_margin"
android:background="@color/imageBackground"
android:elevation="@dimen/document_image_elevation" />
और फिर onCreateView मेथड में
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_scanner_acpt, null);
progress = view.findViewById(R.id.progress);
imageView = view.findViewById(R.id.acpt_image);
imageView.setImageBitmap( bitmap );
imageView.getViewTreeObserver().addOnGlobalLayoutListener(()->
layoutImageView()
);
return view;
}
और फिर layoutImageView () कोड
private void layoutImageView(){
float[] matrixv = new float[ 9 ];
imageView.getImageMatrix().getValues(matrixv);
int w = (int) ( matrixv[Matrix.MSCALE_X] * bitmap.getWidth() );
int h = (int) ( matrixv[Matrix.MSCALE_Y] * bitmap.getHeight() );
imageView.setMaxHeight(h);
imageView.setMaxWidth(w);
}
और परिणाम यह है कि छवि पूरी तरह से अंदर फिट होती है, पहलू अनुपात रखते हुए, और बिटमैप के अंदर होने पर ImageView से अतिरिक्त बचे हुए पिक्सेल नहीं होते हैं।
परिणाम
यह महत्वपूर्ण है ImageView का मतलब यह है कि wra_content और AdjustViewBounds सच है, फिर setMaxWidth और setMaxHeight काम करेगा, यह ImageView के स्रोत कोड में लिखा गया है
/*An optional argument to supply a maximum height for this view. Only valid if
* {@link #setAdjustViewBounds(boolean)} has been set to true. To set an image to be a
* maximum of 100 x 100 while preserving the original aspect ratio, do the following: 1) set
* adjustViewBounds to true 2) set maxWidth and maxHeight to 100 3) set the height and width
* layout params to WRAP_CONTENT. */
ImageView
छवि के आकार को छवि आकार में बदलना है ? उदाहरण के लिए 100dp x 150dp की छविImageView
समान मापों की होगी? या क्या आप मतलब है कि छवि कोImageView
सीमा में कैसे स्केल करें । जैसे 1000dp x 875dp की छवि को 250dp x 250dp में बढ़ाया जाएगा। क्या आपको पहलू अनुपात बनाए रखने की आवश्यकता है?