2016-01-06 52 views
0

我想創建一個自定義視圖,該視圖可以擴展視圖並具有壁畫功能。圖像可以下載,但不能顯示。請幫我,的代碼如下:擴展視圖的Fresco-CustomView無法顯示圖像

public class QView<DH extends DraweeHierarchy> extends View { 

    private DraweeHolder<DH> mDraweeHolder; 
    private boolean mInitialised = false; 

    public QView(Context context) { 
     super(context); 
     init(context); 
    } 

    @SuppressWarnings("unchecked") 
    private void init(Context context) { 
     if(!mInitialised){ 
      GenericDraweeHierarchy hierarchy = new GenericDraweeHierarchyBuilder(getResources()).build(); 
      mDraweeHolder = (DraweeHolder<DH>) DraweeHolder.create(hierarchy, context); 
      mInitialised = true; 
     } 
    } 

    @Override 
    public void onStartTemporaryDetach() { 
     super.onStartTemporaryDetach(); 
     mDraweeHolder.onDetach(); 
    } 

    @Override 
    public void onFinishTemporaryDetach() { 
     super.onFinishTemporaryDetach(); 
     mDraweeHolder.onAttach(); 
    } 

    @Override 
    protected void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     mDraweeHolder.onAttach(); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
     mDraweeHolder.onDetach(); 
    } 

    @SuppressLint("ClickableViewAccessibility") 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return mDraweeHolder.onTouchEvent(event) || super.onTouchEvent(event); 
    } 

    @Override 
    protected boolean verifyDrawable(Drawable who) { 
     if (who == mDraweeHolder.getTopLevelDrawable()) { 
      return true; 
     } 
     return true; 
    } 

    public void setImageURI(Uri uri) { 
     DraweeController controller = Fresco.newDraweeControllerBuilder() 
       .setUri(uri) 
       .setOldController(mDraweeHolder.getController()) 
       .build(); 
     mDraweeHolder.setController(controller); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Drawable drawable = mDraweeHolder.getHierarchy().getTopLevelDrawable(); 
     //Drawable drawable = getResources().getDrawable(R.drawable.weekend_move_access); 
     drawable.setBounds(0, 0, 400, 400); 
     drawable.draw(canvas); 
    } 
} 

MainActivity.java:

LinearLayout ll = (LinearLayout)findViewById(R.id.viewObj); 
    //SimpleDraweeView view = new SimpleDraweeView(this); 
    QView view = new QView(this); 
    LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(400, 400); 
    view.setLayoutParams(layout); 
    view.setImageURI(Uri.parse("http://d.hiphotos.baidu.com/image/pic/item/aa64034f78f0f7363465230c0855b319ebc41327.jpg")); 
    ll.addView(view); 
+0

你爲什麼這麼做?爲什麼不使用SimpleDraweeView? – tyronen

+0

因爲我想用一個普通的視圖來做更多的事情,但simpledraweeview只擴展了imageview。 – Hilda

回答

0

我HAVA做到了。您必須在ImageView中實現updateDrawable和setBounds方法。因爲RootDrawable的getIntrinsicWidth()和getIntrinsicHeight()是-1。