-1

나는 안드로이드에서 신작이다. 나는 캔버스 개체로 약간의 실험을하고있다.Canvas 클래스를 사용하여이 간단한 Android 앱에서 ImageView에 이미지를 올바르게 표시하려면 어떻게해야합니까?

나는 검색 이미지 뷰 (나는이 이미지 뷰에 이미지를 표시하는 표준 및 간단한 방법은 아니라는 것을 알고에 캔버스에 추가하고 다음을 보여주기 위해 노력하고 있지만, 이것은 단지 단순화 더 복잡한 일을하기위한 실험. 캔버스). 그래서

나는 star.png (당김 내 /입술로 32 × 32 픽셀 아이콘// 폴더)를하고 난

이 내 activity_main.xml 레이아웃 구성 파일에 노력하고 있습니다 :

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <ImageView 
     android:id="@+id/star_container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

이 레이아웃은 난을 그릴 수있는 곳입니다 이미지 뷰 가진 ID = star_container를 포함 이미지가 있어야 할 곳에 나는 이미지 뷰를 검색 에서 onCreate에 따라서

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     ImageView imgView = (ImageView) findViewById(R.id.star_container); 

     Canvas canvas; 

     Bitmap star = BitmapFactory.decodeResource(getResources(), R.drawable.star); 
     Bitmap output = Bitmap.createBitmap(32, 32, Bitmap.Config.ARGB_8888); 
     canvas = new Canvas(output); 

     canvas.drawBitmap(star, star.getWidth() + 2, 0, null); 

     imgView.setImageDrawable(new BitmapDrawable(getResources(), output)); 


    } 
} 

() 방법 :

그리고 이것은이보기를 처리하는 MainActivity 클래스 인 캔버스를 사용하여 이미지 놓는다. 그런 다음 I은 캔버스를 사용 otuput 맵에 추가 될 resoruces에서 star.png 화상을 검색하는 비트 맵 오브젝트를 생성한다.

마지막으로 출력 비트 맵을 ImageView으로 설정합니다.

그래서 나는 앱이 실행 중일 때, 이전 이미지 뷰star.png 이미지를 포함하지만이 표시되지 않는 것을 기대했다.

이 응용 프로그램을 실행할 때 오류가 없지만 얻은 유일한 출력은 TextView에 정의 된 텍스트 메시지입니다.

왜? 뭐가 잘못 되었 니? 내가 뭘 놓치고 있니? 이 코드를 수정하고 작동 시키려면 어떻게해야합니까?

+0

전혀 캔버스를 사용하지 않습니다. Canvas를 사용하여 뷰를 그리려면 사용자 정의 View 클래스를 만들고 onDraw를 재정의합니다. 그릴 수있는 캔버스가 전달됩니다. 여기에있는 코드는 너무 복잡하여 보상 할 수없는 코드입니다. –

답변

0

다른 방법 - RECT 영역 사용 : 문서에 따르면

Canvas canvas; 

    Bitmap star = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
    Bitmap output = Bitmap.createBitmap(star.getWidth(), star.getHeight(), Bitmap.Config.ARGB_8888); 
    canvas = new Canvas(output); 
    Rect source = new Rect(0, 0, star.getWidth(), star.getHeight()); 
    canvas.drawBitmap(star, null, source, null);  
    imgView.setImageBitmap(output); 
+0

Canvas를 사용하는 방법을 이해하는 첫 번째 단계이기 때문에 설명 할 수 없습니다. 이제는 하나의 이미지로 작업하고 있지만 Canvas가 필요합니다. 이미지 컴포지션을 만들어야하기 때문입니다. – AndreaNobili

1

:

왼쪽 : 비트 맵의 ​​좌측의 위치

에게 문제 그려지 여기에 있습니다 :

canvas.drawBitmap(star, star.getWidth() + 2, 0, null); 
당신은 비트 맵 범위 외에있는, 그래서 아무 것도 그려지지 않습니다 왼쪽의 값을 사용하고

,이 시도 : 내가 생각 ImageView#setImageBitmap(Bitmap bm)

: canvas.drawBitmap(star, 0, 0, null);

안드로이드 API는 Bitmap 직접 drawable로 설정하는 또 다른 방법을 제공 사용자 정의 View을 구현하고 거기에서 Canvas 기능을 탐색하는 것이 더 좋습니다 (onDraw 메서드에서)

관련 문제